home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 2000 #4 / Amiga Plus CD - 2000 - No. 4.iso / PowerPC / Dev / PPCRelease / AutoDocs / powerup.doc < prev    next >
Encoding:
Text File  |  2000-04-09  |  118.3 KB  |  4,550 lines

  1. TABLE OF CONTENTS
  2.  
  3. PowerUPKernel/PPCAdd64
  4. PowerUPKernel/PPCAdd64p
  5. PowerUPKernel/PPCAddHead
  6. PowerUPKernel/PPCAddHeadSync
  7. PowerUPKernel/PPCAddPortList
  8. PowerUPKernel/PPCAddTail
  9. PowerUPKernel/PPCAddTailSync
  10. PowerUPKernel/PPCAllocMem
  11. PowerUPKernel/PPCAllocPooled
  12. PowerUPKernel/PPCAllocSignal
  13. PowerUPKernel/PPCAllocVec
  14. PowerUPKernel/PPCAllocVecPooled
  15. PowerUPKernel/PPCAnd64
  16. PowerUPKernel/PPCAnd64p
  17. PowerUPKernel/PPCAsl64
  18. PowerUPKernel/PPCAsl64p
  19. PowerUPKernel/PPCAsr64
  20. PowerUPKernel/PPCAsr64p
  21. PowerUPKernel/PPCAttemptSemaphore
  22. PowerUPKernel/PPCAttemptSemaphoreByName
  23. PowerUPKernel/PPCAttemptSemaphoreShared
  24. PowerUPKernel/PPCCacheFlush
  25. PowerUPKernel/PPCCacheFlushAll
  26. PowerUPKernel/PPCCacheInvalid
  27. PowerUPKernel/PPCCallM68k
  28. PowerUPKernel/PPCCallOS
  29. PowerUPKernel/PPCClose
  30. PowerUPKernel/PPCCloseLibrary
  31. PowerUPKernel/PPCCmp64
  32. PowerUPKernel/PPCCmp64p
  33. PowerUPKernel/PPCCoerceMethodA
  34. PowerUPKernel/PPCCreateMessage
  35. PowerUPKernel/PPCCreatePool
  36. PowerUPKernel/PPCCreatePort
  37. PowerUPKernel/PPCCreatePortList
  38. PowerUPKernel/PPCCreateSemaphore
  39. PowerUPKernel/PPCCreateTask
  40. PowerUPKernel/PPCCreateTimerObject
  41. PowerUPKernel/PPCDeleteMessage
  42. PowerUPKernel/PPCDeletePool
  43. PowerUPKernel/PPCDeletePort
  44. PowerUPKernel/PPCDeletePortList
  45. PowerUPKernel/PPCDeleteSemaphore
  46. PowerUPKernel/PPCDeleteTimerObject
  47. PowerUPKernel/PPCDivRem64
  48. PowerUPKernel/PPCDivRem64p
  49. PowerUPKernel/PPCDivs64
  50. PowerUPKernel/PPCDivs64p
  51. PowerUPKernel/PPCDivu64
  52. PowerUPKernel/PPCDivu64p
  53. PowerUPKernel/PPCDoMethodA
  54. PowerUPKernel/PPCDoSuperMethodA
  55. PowerUPKernel/PPCEnqueue
  56. PowerUPKernel/PPCEnqueueSync
  57. PowerUPKernel/PPCFindName
  58. PowerUPKernel/PPCFindNameSync
  59. PowerUPKernel/PPCFindTagItem
  60. PowerUPKernel/PPCFindTask
  61. PowerUPKernel/PPCFinishTask
  62. PowerUPKernel/PPCfprintf
  63. PowerUPKernel/PPCFreeMem
  64. PowerUPKernel/PPCFreePooled
  65. PowerUPKernel/PPCFreeSignal
  66. PowerUPKernel/PPCFreeVec
  67. PowerUPKernel/PPCFreeVecPooled
  68. PowerUPKernel/PPCGetAttr
  69. PowerUPKernel/PPCGetLibSymbol
  70. PowerUPKernel/PPCGetMessage
  71. PowerUPKernel/PPCGetMessageAttr
  72. PowerUPKernel/PPCGetObjectAttrs
  73. PowerUPKernel/PPCGetPortListAttr
  74. PowerUPKernel/PPCGetTagData
  75. PowerUPKernel/PPCGetTaskAttr
  76. PowerUPKernel/PPCGetTimerObject
  77. PowerUPKernel/PPCInsert
  78. PowerUPKernel/PPCInsertSync
  79. PowerUPKernel/PPCkprintf
  80. PowerUPKernel/PPCLoadObject
  81. PowerUPKernel/PPCLoadObjectTagList
  82. PowerUPKernel/PPCLsl64
  83. PowerUPKernel/PPCLsl64p
  84. PowerUPKernel/PPCLsr64
  85. PowerUPKernel/PPCLsr64p
  86. PowerUPKernel/PPCMods64
  87. PowerUPKernel/PPCMods64p
  88. PowerUPKernel/PPCModu64
  89. PowerUPKernel/PPCModu64p
  90. PowerUPKernel/PPCMuls64
  91. PowerUPKernel/PPCMuls64p
  92. PowerUPKernel/PPCMulu64
  93. PowerUPKernel/PPCMulu64p
  94. PowerUPKernel/PPCNeg64
  95. PowerUPKernel/PPCNeg64p
  96. PowerUPKernel/PPCNewList
  97. PowerUPKernel/PPCNextTagItem
  98. PowerUPKernel/PPCObtainPort
  99. PowerUPKernel/PPCObtainSemaphore
  100. PowerUPKernel/PPCObtainSemaphoreByName
  101. PowerUPKernel/PPCObtainSemaphoreShared
  102. PowerUPKernel/PPCOpen
  103. PowerUPKernel/PPCOpenLibrary
  104. PowerUPKernel/PPCOr64
  105. PowerUPKernel/PPCOr64p
  106. PowerUPKernel/PPCprintf
  107. PowerUPKernel/PPCRawDoFmt
  108. PowerUPKernel/PPCRead
  109. PowerUPKernel/PPCReadByte
  110. PowerUPKernel/PPCReadLong
  111. PowerUPKernel/PPCReadWord
  112. PowerUPKernel/PPCReleasePort
  113. PowerUPKernel/PPCReleaseSemaphore
  114. PowerUPKernel/PPCRemHead
  115. PowerUPKernel/PPCRemHeadSync
  116. PowerUPKernel/PPCRemove
  117. PowerUPKernel/PPCRemoveSync
  118. PowerUPKernel/PPCRemPortList
  119. PowerUPKernel/PPCRemTail
  120. PowerUPKernel/PPCRemTailSync
  121. PowerUPKernel/PPCReplyMessage
  122. PowerUPKernel/PPCRevision
  123. PowerUPKernel/PPCSeek
  124. PowerUPKernel/PPCSendMessage
  125. PowerUPKernel/PPCSetPortListAttr
  126. PowerUPKernel/PPCSetSignal
  127. PowerUPKernel/PPCSetTaskAttr
  128. PowerUPKernel/PPCSetTimerObject
  129. PowerUPKernel/PPCSignal
  130. PowerUPKernel/PPCsprintf
  131. PowerUPKernel/PPCSub64
  132. PowerUPKernel/PPCSub64p
  133. PowerUPKernel/PPCUnLoadObject
  134. PowerUPKernel/PPCVersion
  135. PowerUPKernel/PPCvfprintf
  136. PowerUPKernel/PPCvkprintf
  137. PowerUPKernel/PPCvprintf
  138. PowerUPKernel/PPCvsprintf
  139. PowerUPKernel/PPCWait
  140. PowerUPKernel/PPCWaitPort
  141. PowerUPKernel/PPCWaitPortList
  142. PowerUPKernel/PPCWrite
  143. PowerUPKernel/PPCWriteByte
  144. PowerUPKernel/PPCWriteLong
  145. PowerUPKernel/PPCWriteWord
  146. PowerUPKernel/PPCXor64
  147. PowerUPKernel/PPCXor64p
  148. PowerUPKernel/PPCAdd64                                 PowerUPKernel/PPCAdd64
  149.  
  150.     NAME
  151.     PPCAdd64 -- Add 2 64bit integers
  152.  
  153.     SYNOPSIS
  154.     Result = PPCAdd64(highA,lowA,highB,lowB )
  155.     gpr3:gpr4         gpr3  gpr4 gpr5  gpr6
  156.  
  157.     long    PPCAdd64(ULONG,ULONG,ULONG,ULONG);
  158.  
  159.     FUNCTION
  160.     Adds 2 64bit integers and returns the 64bit result in 2
  161.     32bit registers.
  162.  
  163.     INPUTS
  164.     highA         - upper 32bit of value A
  165.     lowA         - lower 32bit of value A
  166.     highB         - upper 32bit of value B
  167.     lowB         - lower 32bit of value B
  168.  
  169.     RESULT
  170.     Result    - 64Bit result devided into 2 registers
  171.  
  172.     SEE ALSO
  173.     PPCAdd64p()
  174.  
  175. PowerUPKernel/PPCAdd64p                               PowerUPKernel/PPCAdd64p
  176.  
  177.     NAME
  178.     PPCAdd64p -- Add 2 64bit integers
  179.  
  180.     SYNOPSIS
  181.     PPCAdd64p(ValueAPtr,ValueBPtr)
  182.               gpr3      gpr4
  183.  
  184.     void    PPCAdd64p(long long*,long long*);
  185.  
  186.     FUNCTION
  187.     Adds 2 64bit integers and returns the 64bit result in
  188.     A.
  189.  
  190.     INPUTS
  191.     ValueAPtr    - Ptr to 64Bit value A
  192.     ValueBPtr    - Ptr to 64Bit value B
  193.  
  194.     SEE ALSO
  195.     PPCAdd64()
  196.  
  197. PowerUPKernel/PPCAddHead                             PowerUPKernel/PPCAddHead
  198.  
  199.    NAME
  200.     PPCAddHead -- insert node at the head of a list
  201.  
  202.    SYNOPSIS
  203.     PPCAddHead(list, node)
  204.                gpr3 gpr4
  205.  
  206.     void PPCAddHead(struct List *, struct Node *)
  207.  
  208.    FUNCTION
  209.     Add a node to the head of a doubly linked list.
  210.  
  211.    WARNING
  212.     This function does not arbitrate for access to the list.  The
  213.     calling task must be the owner of the involved list.
  214.  
  215.    INPUTS
  216.     list - a pointer to the target list header
  217.     node - the node to insert at head
  218.  
  219.    SEE ALSO
  220.     PPCAddTail(), PPCEnqueue(),
  221.     PPCInsert(), PPCRemove(),
  222.     PPCRemHead(), PPCRemTail()
  223.  
  224. PowerUPKernel/PPCAddHeadSync                     PowerUPKernel/PPCAddHeadSync
  225.  
  226.    NAME
  227.     PPCAddHeadSync -- sync insert node at the head of a list
  228.  
  229.    SYNOPSIS
  230.     PPCAddHeadSync(list, node)
  231.                    gpr3 gpr4
  232.  
  233.     void PPCAddHeadSync(struct List *, struct Node *)
  234.  
  235.    FUNCTION
  236.     Add a node to the head of a doubly linked list.
  237.  
  238.    INPUTS
  239.     list - a pointer to the target list header
  240.     node - the node to insert at head
  241.  
  242.    SEE ALSO
  243.     PPCAddTailSync(), PPCEnqueueSync(),
  244.     PPCInsertSync(), PPCRemoveSync(),
  245.     PPCRemHeadSync(), PPCRemTailSync()
  246.  
  247. PowerUPKernel/PPCAddPortList                     PowerUPKernel/PPCAddPortList
  248.  
  249.    NAME
  250.     PPCAddPortList -- Add a port to the PPCPortList object
  251.  
  252.    SYNOPSIS
  253.     Success =  PPCAddPortList(PPCPortList,PPCPort)
  254.     gpr3                      gpr3        gpr4
  255.  
  256.     BOOL PPCAddPortList(void*,void*);
  257.  
  258.    FUNCTION
  259.     This function adds a new Port to your PPCPortList object.
  260.  
  261.    INPUT
  262.     PPCPortList - a pointer to the PPCPortList object
  263.     PPCPort     - a pointer to the PPC Message port
  264.  
  265.    RESULT
  266.     Success - A Boolean tells you if the operation was successful.
  267.  
  268.    SEE ALSO
  269.     PPCCreatePortList(), powerup/ppclib/message.h
  270.  
  271. PowerUPKernel/PPCAddTail                             PowerUPKernel/PPCAddTail
  272.  
  273.    NAME
  274.     PPCAddTail -- append node to tail of a list
  275.  
  276.    SYNOPSIS
  277.     PPCAddTail(list, node)
  278.                gpr3 gpr4
  279.  
  280.     void PPCAddTail(struct List *, struct Node *);
  281.  
  282.    FUNCTION
  283.     Add a node to the tail of a doubly linked list.
  284.  
  285.    WARNING
  286.     This function does not arbitrate for access to the list.  The
  287.     calling task must be the owner of the involved list.
  288.  
  289.    INPUTS
  290.     list - a pointer to the target list header
  291.     node - a pointer to the node to insert at tail of the list
  292.  
  293.    SEE ALSO
  294.     PPCAddHead(), PPCEnqueue(),
  295.     PPCInsert(), PPCRemove(),
  296.     PPCRemHead(), PPCRemTail()
  297.  
  298. PowerUPKernel/PPCAddTailSync                     PowerUPKernel/PPCAddTailSync
  299.  
  300.    NAME
  301.     PPCAddTailSync -- sync append node to tail of a list
  302.  
  303.    SYNOPSIS
  304.     PPCAddTailSync(list, node)
  305.                    gpr3 gpr4
  306.  
  307.     void PPCAddTailSync(struct List *, struct Node *);
  308.  
  309.    FUNCTION
  310.     Add a node to the tail of a doubly linked list.
  311.  
  312.    INPUTS
  313.     list - a pointer to the target list header
  314.     node - a pointer to the node to insert at tail of the list
  315.  
  316.    SEE ALSO
  317.     PPCAddHeadSync(), PPCEnqueueSync(),
  318.     PPCInsertSync(), PPCRemoveSync(),
  319.     PPCRemHeadSync(), PPCRemTailSync()
  320.  
  321. PowerUPKernel/PPCAllocMem                           PowerUPKernel/PPCAllocMem
  322.  
  323.     NAME
  324.     PPCAllocMem -- Alloc a PPC cache aligned memory block
  325.  
  326.     SYNOPSIS
  327.     Memory = PPCAllocMem(size,attributes )
  328.     gpr3                 gpr3 gpr4
  329.  
  330.     void *PPCAllocMem(ULONG,ULONG);
  331.  
  332.     FUNCTION
  333.     Allocates a memoryblock which is aligned to the PPC cache lines.
  334.     You should only use the PPC with memblocks allocated through
  335.     this function.
  336.  
  337.     INPUTS
  338.     Size         - memory block size
  339.     Attributes    - memory attributes
  340.  
  341.       o exec/memory.h attributes
  342.  
  343.       o MEMF_NOCACHESYNCPPC for a synchronized non cacheable mapped
  344.         memory area on the PPC side. The Amiga side is still copyback then.
  345.         Synchronized means that accesses to that memory are in order
  346.         for the CPU which is typically used for IO memory.
  347.  
  348.       o MEMF_NOCACHESYNCM68K for a synchronized non cacheable mapped
  349.         memory area on the M68k side. The PPC side is still copyback then.
  350.         Synchronized means that accesses to that memory are in order
  351.         for the CPU which is typically used for IO memory.
  352.  
  353.       o MEMF_NOCACHEPPC for a nonsynchronized non cacheable mapped
  354.         memory area on the PPC side. The Amiga side is still copyback then.
  355.         Not Synchronized means that accesses to that memory may not be
  356.         in order for the CPU which is typically used for framebuffer memory.
  357.  
  358.       o MEMF_NOCACHEM68K for a nosynchronized non cacheable mapped
  359.         memory area on the M68k side. The PPC side is still copyback then.
  360.         Not Synchronized means that accesses to that memory may not be
  361.         in order for the CPU which is typically used for framebuffer memory.
  362.  
  363.       o MEMF_WRITETHROUGHPPC for writethrough mapped memory area on the
  364.         PPC side. The 68k side is still copyback then.
  365.         Writethrough means that the cache updates every write to the
  366.         cache at once to the memory.
  367.  
  368.       o MEMF_WRITETHROUGH68K for writethrough mapped memory area on the
  369.         68k side. The PPC side is still copyback then.
  370.         Writethrough means that the cache updates every write to the
  371.         cache at once to the memory.
  372.  
  373.  
  374.       If you use the M68k and PPC attribute at the same time the memory
  375.       is mapped noncacheable on both sides. This also means that your
  376.       allocation is 4096 Bytes aligned that may waste memory if you need
  377.       less ram.
  378.  
  379.     RESULT
  380.     Memory    - ptr to the memory block
  381.  
  382.     NOTES
  383.     The reason for this routine is that there's a serious
  384.     cache copyback problem when ppc and 68060 cache lines
  385.     cross borders. Then the contents of the memory isn't guranteed.
  386.     The cache issue is explained in detail in Docs/PowerUP.guide
  387.  
  388.     SEE ALSO
  389.     PPCFreeMem, exec/memory.h
  390.  
  391. PowerUPKernel/PPCAllocPooled                     PowerUPKernel/PPCAllocPooled
  392.  
  393.     NAME
  394.     PPCAllocPooled -- Allocate memory with the pool manager
  395.  
  396.     SYNOPSIS
  397.     memory=PPCAllocPooled(poolHeader,memSize)
  398.     gpr3                  gpr3       gpr4
  399.  
  400.     void *PPCAllocPooled(void *,ULONG);
  401.  
  402.     FUNCTION
  403.     Allocate memSize bytes of memory, and return a pointer. NULL is
  404.     returned if the allocation fails.
  405.  
  406.     Doing a DeletePool() on the pool will free all of the puddles
  407.     and thus all of the allocations done with AllocPooled() in that
  408.     pool.  (No need to FreePooled() each allocation)
  409.  
  410.     INPUTS
  411.     memSize - the number of bytes to allocate
  412.     poolHeader - a specific private pool header.
  413.  
  414.     RESULT
  415.     A pointer to the memory, or NULL.
  416.     The memory block returned is long word aligned.
  417.  
  418.     NOTES
  419.     The pool function do not protect an individual pool from
  420.     multiple accesses.  The reason is that in most cases the pools
  421.     will be used by a single task.  If your pool is going to
  422.     be used by more than one task you must Semaphore protect
  423.     the pool from having more than one task trying to allocate
  424.     within the same pool at the same time.
  425.  
  426.     SEE ALSO
  427.     PPCFreePooled(), PPCCreatePool(), PPCDeletePool()
  428.  
  429. PowerUPKernel/PPCAllocSignal                     PowerUPKernel/PPCAllocSignal
  430.  
  431.    NAME
  432.     PPCAllocSignal -- allocate a PPC task signal bit
  433.  
  434.    SYNOPSIS
  435.     signalNum = PPCAllocSignal(signalNum)
  436.     gpr3               gpr3
  437.  
  438.     ULONG PPCAllocSignal(LONG);
  439.  
  440.    FUNCTION
  441.     Allocate a signal bit from the current PPC task's free signals.
  442.     Either a particular bit, or the next free bit may be allocated.
  443.     The signal associated with the bit will be properly initialized
  444.     (cleared).
  445.     At least 16 user signals are available per task.  Signals should
  446.     be deallocated before the task exits.
  447.  
  448.     If the signal is already in use (or no free signals are available)
  449.     a -1 is returned.
  450.  
  451.     Allocated signals are only valid for use with the task that
  452.     allocated them.
  453.  
  454.  
  455.    INPUTS
  456.     signalNum - the desired signal number {of 0..31} or -1 for no
  457.             preference.
  458.  
  459.    RESULTS
  460.     signalNum - the signal bit number allocated {0..31}. If no signals
  461.             are available, this function returns -1.
  462.  
  463.    SEE ALSO
  464.     PPCFreeSignal()
  465.  
  466. PowerUPKernel/PPCAllocVec                           PowerUPKernel/PPCAllocVec
  467.  
  468.     NAME
  469.     PPCAllocVec -- allocate memory and keep track of the size  (V36)
  470.  
  471.     SYNOPSIS
  472.     memoryBlock = PPCAllocVec(byteSize, attributes)
  473.     gpr3                      gpr3     gpr4
  474.  
  475.     void *PPCAllocVec(ULONG, ULONG);
  476.  
  477.     INPUTS
  478.     Size         - memory block size
  479.     Attributes    - memory attributes
  480.  
  481.       o exec/memory.h attributes
  482.  
  483.       o MEMF_NOCACHESYNCPPC for a synchronized non cacheable mapped
  484.         memory area on the PPC side. The Amiga side is still copyback then.
  485.         Synchronized means that accesses to that memory are in order
  486.         for the CPU which is typically used for IO memory.
  487.  
  488.       o MEMF_NOCACHESYNCM68K for a synchronized non cacheable mapped
  489.         memory area on the M68k side. The PPC side is still copyback then.
  490.         Synchronized means that accesses to that memory are in order
  491.         for the CPU which is typically used for IO memory.
  492.  
  493.       o MEMF_NOCACHEPPC for a nonsynchronized non cacheable mapped
  494.         memory area on the PPC side. The Amiga side is still copyback then.
  495.         Not Synchronized means that accesses to that memory may not be
  496.         in order for the CPU which is typically used for framebuffer memory.
  497.  
  498.       o MEMF_NOCACHEM68K for a nosynchronized non cacheable mapped
  499.         memory area on the M68k side. The PPC side is still copyback then.
  500.         Not Synchronized means that accesses to that memory may not be
  501.         in order for the CPU which is typically used for framebuffer memory.
  502.  
  503.       o MEMF_WRITETHROUGHPPC for writethrough mapped memory area on the
  504.         PPC side. The 68k side is still copyback then.
  505.         Writethrough means that the cache updates every write to the
  506.         cache at once to the memory.
  507.  
  508.       o MEMF_WRITETHROUGH68K for writethrough mapped memory area on the
  509.         68k side. The PPC side is still copyback then.
  510.         Writethrough means that the cache updates every write to the
  511.         cache at once to the memory.
  512.  
  513.       If you use the M68k and PPC attribute at the same time the memory
  514.       is mapped noncacheable on both sides. This also means that your
  515.       allocation is 4096 Bytes aligned that may waste memory if you need
  516.       less ram.
  517.  
  518.     RESULT
  519.     Memory    - ptr to the memory block
  520.  
  521.     FUNCTION
  522.     This function works identically to AllocMem(), but tracks the size
  523.     of the allocation.
  524.  
  525.     See the PPCAllocMem() documentation for details.
  526.  
  527.     WARNING
  528.     The result of any memory allocation MUST be checked, and a viable
  529.     error handling path taken.  ANY allocation may fail if memory has
  530.     been filled.
  531.     The cache issue is explained in detail in Docs/PowerUP.guide
  532.  
  533.     SEE ALSO
  534.     PPCFreeVec(), PPCAllocMem()
  535.  
  536. PowerUPKernel/PPCAllocVecPooled               PowerUPKernel/PPCAllocVecPooled
  537.  
  538.    NAME
  539.     PPCAllocVecPooled -- allocate memory with the pool manager and keep track of
  540.  the size
  541.  
  542.    SYNOPSIS
  543.     memoryBlock = PPCAllocVecPooled(Pool,byteSize)
  544.     gpr3                        gpr3     gpr4
  545.  
  546.     void *PPCAllocVecPooled(void*, ULONG);
  547.  
  548.    FUNCTION
  549.     This function works identically to PPCAllocPooled(), but tracks the size
  550.     of the allocation.
  551.  
  552.     See the PPCAllocMem() documentation for details.
  553.  
  554.    SEE ALSO
  555.     PPCFreeVecPooled(), exec/memory.h, ppclib/memory.h
  556.  
  557. PowerUPKernel/PPCAnd64                                 PowerUPKernel/PPCAnd64
  558.  
  559.     NAME
  560.     PPCAnd64 -- And 2 64 bit integer values (V46)
  561.  
  562.     SYNOPSIS
  563.     Value    =    PPCAnd64(ValueA ,  ValueB)
  564.     gpr3:gpr4               gpr3:gpr4  gpr5:gpr6
  565.  
  566.     long long PPCAnd64(long long, long long);
  567.  
  568.     FUNCTION
  569.     Ands 2 long long values and returns a long long result.
  570.  
  571.     INPUTS
  572.     ValueA - long long value A
  573.     ValueB - long long value B
  574.  
  575.     RESULT
  576.     Value - long long result
  577.  
  578.     NOTES
  579.     SAS PPC unfortunately has no 64bit integer support, so you
  580.     should look for the PTR functions.
  581.  
  582.     SEE ALSO
  583.     PPCAnd64p()
  584.  
  585. PowerUPKernel/PPCAnd64p                               PowerUPKernel/PPCAnd64p
  586.  
  587.     NAME
  588.     PPCAnd64p -- And 2 64 bit integer values (V46)
  589.  
  590.     SYNOPSIS
  591.     PPCAnd64p(ValuePtrA, ValuePtrB)
  592.               gpr3       gpr4
  593.  
  594.     void    PPCAnd64p(long*,long*);
  595.  
  596.     FUNCTION
  597.     Ands 2 long long values and returns the result at ValuePtrA
  598.  
  599.     INPUTS
  600.     ValuePtrA - ptr to a long long value A
  601.     ValuePtrB - ptr to a long long value B
  602.  
  603.     RESULT
  604.     ValuePtrA - long long result is written to the ValuePtrA address.
  605.  
  606.     SEE ALSO
  607.     PPCAnd64()
  608.  
  609. PowerUPKernel/PPCAsl64                                 PowerUPKernel/PPCAsl64
  610.  
  611.     NAME
  612.     PPCAsl64 -- Arithmetic Shift left an 64 bit integer (V46)
  613.  
  614.     SYNOPSIS
  615.     Value    =    PPCAsl64(ValueA ,  ShiftOffset)
  616.     gpr3:gpr4                 gpr3:gpr4  gpr5
  617.  
  618.     long long PPCAsl64(long long, int);
  619.  
  620.     FUNCTION
  621.     Arithmetic shift left a long long value and return a long long result.
  622.  
  623.     INPUTS
  624.     ValueA      - long long value A
  625.     ShiftOffset - integer value(0..63)
  626.  
  627.     RESULT
  628.     Value - long long result
  629.  
  630.     NOTES
  631.     SAS PPC unfortunately has no 64bit integer support, so you
  632.     should look for the PTR functions.
  633.  
  634.     SEE ALSO
  635.     PPCAsl64p()
  636.  
  637. PowerUPKernel/PPCAsl64p                               PowerUPKernel/PPCAsl64p
  638.  
  639.     NAME
  640.     PPCAsl64p -- Arithmetic Shift left an 64 bit integer (V46)
  641.  
  642.     SYNOPSIS
  643.     PPCAsl64p(ValuePtrA, Shiftoffset)
  644.               gpr3       gpr4
  645.  
  646.     void    PPCAsl64p(long*,int);
  647.  
  648.     FUNCTION
  649.     Arithmetic shift left a long long value and return at return
  650.     at ValuePtrA
  651.  
  652.     INPUTS
  653.     ValuePtrA   - ptr to a long long value A
  654.     ShiftOffset - integer value(0..63)
  655.  
  656.     RESULT
  657.     ValuePtrA - long long result is written to the ValuePtrA address.
  658.  
  659.     SEE ALSO
  660.     PPCAsl64()
  661.  
  662. PowerUPKernel/PPCAsr64                                 PowerUPKernel/PPCAsr64
  663.  
  664.     NAME
  665.     PPCAsr64 -- Arithmetic Shift right an 64 bit integer (V46)
  666.  
  667.     SYNOPSIS
  668.     Value    =    PPCAsr64(ValueA ,  ShiftOffset)
  669.     gpr3:gpr4                 gpr3:gpr4  gpr5
  670.  
  671.     long long PPCAsr64(long long, int);
  672.  
  673.     FUNCTION
  674.     Arithmetic shift right a long long value and return a long long result.
  675.  
  676.     INPUTS
  677.     ValueA      - long long value A
  678.     ShiftOffset - integer value(0..63)
  679.  
  680.     RESULT
  681.     Value - long long result
  682.  
  683.     NOTES
  684.     SAS PPC unfortunately has no 64bit integer support, so you
  685.     should look for the PTR functions.
  686.  
  687.     SEE ALSO
  688.     PPCAsr64p()
  689.  
  690. PowerUPKernel/PPCAsr64p                               PowerUPKernel/PPCAsr64p
  691.  
  692.     NAME
  693.     PPCAsr64p -- Arithmetic Shift right an 64 bit integer (V46)
  694.  
  695.     SYNOPSIS
  696.     PPCAsr64p(ValuePtrA, Shiftoffset)
  697.               gpr3       gpr4
  698.  
  699.     void    PPCAsr64p(long*,int);
  700.  
  701.     FUNCTION
  702.     Arithmetic shift right a long long value and return at return
  703.     at ValuePtrA
  704.  
  705.     INPUTS
  706.     ValuePtrA   - ptr to a long long value A
  707.     ShiftOffset - integer value(0..63)
  708.  
  709.     RESULT
  710.     ValuePtrA - long long result is written to the ValuePtrA address.
  711.  
  712.     SEE ALSO
  713.     PPCAsr64()
  714.  
  715. PowerUPKernel/PPCAttemptSemaphore           PowerUPKernel/PPCAttemptSemaphore
  716.  
  717.    NAME
  718.     PPCAttemptSemaphore -- try to obtain without blocking
  719.  
  720.    SYNOPSIS
  721.     success = PPCAttemptSemaphore(Semaphore)
  722.     gpr3                  gpr3
  723.  
  724.     LONG PPCAttemptSemaphore(void*);
  725.  
  726.    FUNCTION
  727.     This call is similar to PPCObtainSemaphore(), except that it will not
  728.     block if the semaphore could not be locked.
  729.  
  730.    INPUT
  731.        Semaphore -- a semaphore object returned by PPCCreateSemaphore()
  732.  
  733.    RESULT
  734.     success -- TRUE if the semaphore was locked, false if some
  735.                other task already possessed the semaphore.
  736.  
  737.    SEE ALSO
  738.     PPCObtainSemaphoreShared(), PPCObtainSemaphoreByName(),
  739.     PPCReleaseSemaphore(), PPCAttemptSemaphoreShared(),
  740.     PPCAttemptSemaphoreByName()
  741.  
  742. PowerUPKernel/PPCAttemptSemaphoreByNameowerUPKernel/PPCAttemptSemaphoreByName
  743.  
  744.    NAME
  745.     PPCAttemptSemaphoreByName -- try to obtain without blocking
  746.  
  747.    SYNOPSIS
  748.     Semaphore PPCAttemptSemaphoreByName(Name,Error)
  749.                                     gpr3 gpr4
  750.  
  751.     void* PPCAttemptSemaphoreByName(char *,ULONG *)
  752.  
  753.    FUNCTION
  754.     Tries to find a Semaphore by the name and does an PPCAttemptSemaphore().
  755.     No Arbitration needed.
  756.     If it succeeds the Result is TRUE and if doesn't find it
  757.     it returns the error reason at the address you given as
  758.     the ErrorPtr.
  759.     Current ErrorCodes are PPCSEMAPHOREERROR_SEMAPHORENOTFOUND or
  760.     PPCSEMAPHOREERROR_OBTAINED when the attempt hadn't succeed.
  761.  
  762.    INPUTS
  763.     Name    - Ptr to the name cstring
  764.     Error    - Ptr to an error result field
  765.  
  766.  
  767.    RESULTS
  768.     Semaphore - If FALSE no Semaphore with that name was found
  769.  
  770.    SEE ALSO
  771.     PPCAttemptSemaphore(), PPCObtainSemaphoreByName()
  772.  
  773. PowerUPKernel/PPCAttemptSemaphoreSharedowerUPKernel/PPCAttemptSemaphoreShared
  774.  
  775.    NAME
  776.     PPCAttemptSemaphoreShared -- try to obtain without blocking
  777.  
  778.    SYNOPSIS
  779.     success = PPCAttemptSemaphoreShared(Semaphore)
  780.     gpr3                        gpr3
  781.  
  782.     BOOL    PPCAttemptSemaphoreShared(void*);
  783.  
  784.    FUNCTION
  785.     This call is similar to PPCObtainSemaphoreShared(), except that it
  786.     will not block if the semaphore could not be locked.
  787.  
  788.    INPUT
  789.        Semaphore -- a semaphore object returned by PPCCreateSemaphore()
  790.  
  791.    RESULT
  792.     success -- TRUE if the semaphore was granted, false if some
  793.                other task already possessed the semaphore in
  794.                exclusive mode.
  795.  
  796.    SEE ALSO
  797.     PPCObtainSemaphoreShared(), PPCObtainSemaphoreByName(),
  798.     PPCReleaseSemaphore(), PPCAttemptSemaphore(),
  799.     PPCAttemptSemaphoreByName()
  800.  
  801. PowerUPKernel/PPCCacheFlush                       PowerUPKernel/PPCCacheFlush
  802.  
  803.    NAME
  804.     PPCCacheFlush - User callable custom cache clearing
  805.  
  806.    SYNOPSIS
  807.     PPCCacheFlush(Address,Length)
  808.                   gpr3    gpr4
  809.  
  810.     void PPCCacheFlush(APTR,ULONG);
  811.  
  812.    FUNCTION
  813.     Flush out the contents of the instruction and Data PPC cache in
  814.     a certain address space. Useful to optimize the shared memory
  815.     handling because flushing the whole cache may not what you
  816.     want.
  817.     If dirty data cache lines are present, push them to memory first.
  818.  
  819.     Caches must be cleared after *any* operation that could cause
  820.     invalid or stale data.  The most common cases are DMA,modifying
  821.     instructions using the processor or modifying Data which is
  822.     shared by the 680xx and PPC.
  823.  
  824.    ATTENTION
  825.     Please read the PowerUP.guide Cache chapter before you use
  826.     this function.
  827.  
  828.    SEE ALSO
  829.     PPCCacheFlushAll(), PPCCacheInvalid()
  830.  
  831. PowerUPKernel/PPCCacheFlushAll                 PowerUPKernel/PPCCacheFlushAll
  832.  
  833.    NAME
  834.     PPCCacheFlushAll - User callable simple cache clearing
  835.  
  836.    SYNOPSIS
  837.     PPCCacheFlushAll()
  838.  
  839.     void PPCCacheFlushAll(void);
  840.  
  841.    FUNCTION
  842.     Flush out the contents of the instruction and Data PPC cache.
  843.     If dirty data cache lines are present, push them to memory first.
  844.  
  845.     Caches must be cleared after *any* operation that could cause
  846.     invalid or stale data.  The most common cases are DMA,modifying
  847.     instructions using the processor or modifying Data which is
  848.     shared by the 680xx and PPC.
  849.  
  850.    ATTENTION
  851.     Please read the PowerUP.guide Cache chapter before you use
  852.     this function.
  853.  
  854.    SEE ALSO
  855.     PPCCacheFlush(), PPCCacheInvalid()
  856.  
  857. PowerUPKernel/PPCCacheInvalid                   PowerUPKernel/PPCCacheInvalid
  858.  
  859.    NAME
  860.     PPCCacheInvalid - User callable custom cache invalidating
  861.  
  862.    SYNOPSIS
  863.     PPCCacheInvalid(Address,Length)
  864.                     gpr3    gpr4
  865.  
  866.     void PPCCacheInvalid(APTR,ULONG);
  867.  
  868.    FUNCTION
  869.     Invalid the contents of the instruction and Data PPC cache in
  870.     a certain address space. Useful to optimize the shared memory
  871.     handling because flushing the whole cache may not what you
  872.     want. This function doesn`t write back the contents of the used
  873.     dirty cache lines.
  874.     Be also aware that the Address must be PPC cache line aligned,
  875.     to avoid that you invalid cache lines you partly use.
  876.  
  877.    ATTENTION
  878.     Please read the PowerUP.guide Cache chapter before you use
  879.     this function.
  880.  
  881.    SEE ALSO
  882.     PPCCacheFlushAll(), PPCCacheFlush()
  883.  
  884. PowerUPKernel/PPCCallM68k                           PowerUPKernel/PPCCallM68k
  885.  
  886.     NAME
  887.     PPCCallM68k -- Calls a M68k Function
  888.  
  889.     SYNOPSIS
  890.     PPCCallM68k(Caos)
  891.                 gpr3
  892.  
  893.     ULONG PPCCallM68k(struct Caos*);
  894.  
  895.     FUNCTION
  896.     Calls a m68k function and returns the result. You have
  897.     to be very careful with what the function does.
  898.  
  899.     INPUTS
  900.     Caos    - The lib,offset,register structure
  901.  
  902.     EXAMPLE
  903.     Caos.caos_Un.Function - needs the function address
  904.     Caos.d0-a6            - take the parameters
  905.  
  906.     NOTE
  907.     This function won`t be supported by a recompile
  908.     for the ABox OS. It may only run in an AmigaOS
  909.     emulation.
  910.  
  911.     DESCRIPTION
  912.     For calling functions from the PPC under M68k AmigaOS or for
  913.     calling functions on the PPC Supervisor mode you have to care
  914.     for the cache issues. Please read the Cache chapter in the
  915.     docs/powerup.guide about the cache problems involved.
  916.     If you do something wrong here you can expect that you loose
  917.     data, get wrong data or simply crash the machine.
  918.     The caos register fields are updated with the register values
  919.     when the M68k function exits.(V45)
  920.  
  921.     IF_CACHEFLUSHNO:
  922.     You use this mode for the cpu if your function
  923.     touches no memory both cpus use.
  924.  
  925.     Example: Close(File)
  926.              If you call this function by the PPC there`s no need
  927.              to flush the cache because the PPC isn`t allowed to
  928.              touch any memory which has to do with the File BPTR.
  929.     ATTENTION:
  930.              The PPC MUST NOT be used to poke into AmigaOS system
  931.              structures.
  932.  
  933.     IF_CACHEFLUSHALL:
  934.     You use this mode for the cpu if your function
  935.     touches memory both cpus use and it`s no simple memory area
  936.     which may be flushed individually. This should be used by default.
  937.  
  938.     Example: OpenWindowTagList(NewWindow,TagList)
  939.              Here you pass a complex data structure which may use
  940.              memory areas at several different areas.
  941.  
  942.     IF_CACHEFLUSHAREA:
  943.     You use this mode for the cpu if your function
  944.     touches memory both cpus use and it`s a memory area which isn`t
  945.     very big. It depends on the size and how many lines are dirty
  946.     if this is faster than IF_CACHEFLUSHALL.
  947.     With the Start and Length fields of each cpu you can define
  948.     the area.
  949.  
  950.     Example: Write(File,Address,Length)
  951.              When the PPC runs this function the PPC must make sure
  952.              that all data in the to be written memory area is in
  953.              in the memory and not only in the cache.
  954.  
  955.     IF_CACHEINVALIDAREA: (V45)
  956.     You use this mode for the cpu if your function
  957.     touches memory both cpus use and it`s a memory area where you
  958.     don`t care for valid data anymore.
  959.     With the Start and Length fields of each cpu you can define
  960.     the area.
  961.  
  962.     Example: Read(File,Address,Length)
  963.              When the PPC runs this function the PPC has no need
  964.              anymore for anything which is in its cache for the
  965.              area the Address and Length define, so you could
  966.              invalidate this instead of doing a cacheflush which
  967.              may write back dirty lines.
  968.              Be VERY careful about this.
  969.  
  970.     ATTENTION! The Address must be 32Byte aligned, so you should always
  971.     use PPCAllocMem for data which is used on the M68k and PPC
  972.     You are NOT allowed to use normal pools for exchanging data between
  973.     the M68k and PPC.
  974.  
  975.     IF_ASYNC: (V45)
  976.     If you use this flag, the function is called asynchronous and
  977.     the PPC doesn`t have to wait for a result.
  978.     This flag is only checked in the M68kCacheMode field.
  979.     This also means that the result of the PPCCall#? function
  980.     is meaningless.
  981.     Normally this flag doesn`t really fit into a CacheMode flag, but
  982.     well..too bad i haven`t declared another flag field there.
  983.  
  984.     SEE ALSO
  985.     PPCCallOS()
  986.  
  987. PowerUPKernel/PPCCallOS                               PowerUPKernel/PPCCallOS
  988.  
  989.     NAME
  990.     PPCCallOS -- Calls an OS Library Function
  991.  
  992.     SYNOPSIS
  993.     PPCCallOS(Caos)
  994.               gpr3
  995.  
  996.     ULONG PPCCallOS(struct Caos*);
  997.  
  998.     FUNCTION
  999.     Calls an OS function and returns the result. You have
  1000.     to be very careful which function you call. With
  1001.     FD2Inline you can create all inline AmigaOS inline calls.
  1002.  
  1003.     INPUTS
  1004.     Caos    - The lib,offset,register structure
  1005.  
  1006.     EXAMPLE
  1007.     PPCAllocMem(Size,Attribute):
  1008.     Caos.caos_Un.Offset    =    LVO_AllocMem;
  1009.     Caos.d0            =    Size;
  1010.     Caos.d1            =    Attribute;
  1011.     Caos.a6            =    SysBase;
  1012.  
  1013.     NOTE
  1014.     This function isn`t source portable to the next
  1015.     OS. It may only run in an AmigaOS emulation.
  1016.  
  1017.     DESCRIPTION
  1018.     For calling functions from the PPC under M68k AmigaOS or for
  1019.     calling functions on the PPC Supervisor mode you have to care
  1020.     for the cache issues. Please read the Cache chapter in the
  1021.     docs/powerup.guide about the cache problems involved.
  1022.     If you do something wrong here you can expect that you loose
  1023.     data, get wrong data or simply crash the machine.
  1024.  
  1025.     IF_CACHEFLUSHNO:
  1026.     You use this mode for the cpu if your function
  1027.     touches no memory both cpus use.
  1028.  
  1029.     Example: Close(File)
  1030.              If you call this function by the PPC there`s no need
  1031.              to flush the cache because the PPC isn`t allowed to
  1032.              touch any memory which has to do with the File BPTR.
  1033.     ATTENTION:
  1034.              The PPC MUST NOT be used to poke into AmigaOS system
  1035.              structures.
  1036.  
  1037.     IF_CACHEFLUSHALL:
  1038.     You use this mode for the cpu if your function
  1039.     touches memory both cpus use and it`s no simple memory area
  1040.     which may be flushed individually. This should be used by default.
  1041.  
  1042.     Example: OpenWindowTagList(NewWindow,TagList)
  1043.              Here you pass a complex data structure which may use
  1044.              memory areas at several different areas.
  1045.  
  1046.     IF_CACHEFLUSHAREA:
  1047.     You use this mode for the cpu if your function
  1048.     touches memory both cpus use and it`s a memory area which isn`t
  1049.     very big. It depends on the size and how many lines are dirty
  1050.     if this is faster than IF_CACHEFLUSHALL.
  1051.     With the Start and Length fields of each cpu you can define
  1052.     the area.
  1053.  
  1054.     Example: Write(File,Address,Length)
  1055.              When the PPC runs this function the PPC must make sure
  1056.              that all data in the to be written memory area is in
  1057.              in the memory and not only in the cache.
  1058.  
  1059.     IF_CACHEINVALIDAREA: (V45)
  1060.     You use this mode for the cpu if your function
  1061.     touches memory both cpus use and it`s a memory area where you
  1062.     don`t care for valid data anymore.
  1063.     With the Start and Length fields of each cpu you can define
  1064.     the area.
  1065.  
  1066.     Example: Read(File,Address,Length)
  1067.              When the PPC runs this function the PPC has no need
  1068.              anymore for anything which is in its cache for the
  1069.              area the Address and Length define, so you could
  1070.              invalidate this instead of doing a cacheflush which
  1071.              may write back dirty lines.
  1072.              Be VERY careful about this.
  1073.  
  1074.     ATTENTION! The Address must be 32Byte aligned, so you should always
  1075.     use PPCAllocMem for data which is used on the M68k and PPC
  1076.     You are NOT allowed to use normal pools for exchanging data between
  1077.     the M68k and PPC.
  1078.  
  1079.     IF_ASYNC: (V45)
  1080.     If you use this flag, the function is called asynchronous and
  1081.     the PPC doesn`t have to wait for a result.
  1082.     This flag is only checked in the M68kCacheMode field.
  1083.     This also means that the result of the PPCCall#? function
  1084.     is meaningless.
  1085.     Normally this flag doesn`t really fit into a CacheMode flag, but
  1086.     well..too bad i haven`t declared another flag field there.
  1087.  
  1088.     SEE ALSO
  1089.     PPCCallM68k()
  1090.  
  1091. PowerUPKernel/PPCClose                                 PowerUPKernel/PPCClose
  1092.  
  1093.     NAME
  1094.     PPCClose -- Close an open file
  1095.  
  1096.     SYNOPSIS
  1097.     success = PPCClose( file )
  1098.     gpr3               gpr3
  1099.  
  1100.     BOOL PPCClose(BPTR)
  1101.  
  1102.     FUNCTION
  1103.     This function is equal to the dos.library/Close function.
  1104.     It works in the context of the Msg Task each PPC Task has
  1105.     on the AmigaOS side.
  1106.  
  1107.     INPUTS
  1108.     file - BCPL pointer to a file handle
  1109.  
  1110.     RESULTS
  1111.     success - returns if PPCClose() succeeded.
  1112.  
  1113.     SEE ALSO
  1114.     PPCOpen(), PPCRead(), PPCWrite(), PPCSeek()
  1115.  
  1116. PowerUPKernel/PPCCloseLibrary                   PowerUPKernel/PPCCloseLibrary
  1117.  
  1118.    NAME
  1119.     PPCCloseLibrary -- Close a shared object module (V46)
  1120.  
  1121.    SYNOPSIS
  1122.     PPCCloseLibrary(LibObject)
  1123.  
  1124.     void    PPCCloseLibrary(void*);
  1125.                             gpr3
  1126.  
  1127.    FUNCTION
  1128.     Closes a shared elf object. If the object isn`t used
  1129.     anymore and if the function __LIB_Expunge exists it is
  1130.     executed and if it returns TRUE the shared object is
  1131.     removed.
  1132.  
  1133.    INPUTS
  1134.     LibObject - shared library object
  1135.  
  1136.    RESULT
  1137.  
  1138.    NOTES
  1139.     Simular to the NetBSD dlopen(), dlclose(), dlsym() interface.
  1140.     If there`s a working ld a dynamic symbol link shouldn`t be
  1141.     the problem anymore but at the moment LD isn`t useful.
  1142.  
  1143.    SEE ALSO
  1144.     PPCOpenLibrary(), PPCGetLibSymbol()
  1145.  
  1146. PowerUPKernel/PPCCmp64                                 PowerUPKernel/PPCCmp64
  1147.  
  1148.     NAME
  1149.     PPCCmp64 -- Compare 2 64bit integers
  1150.  
  1151.     SYNOPSIS
  1152.     Result = PPCCmp64(highA,lowA,highB,lowB )
  1153.     gpr3              gpr3  gpr4 gpr5  gpr6
  1154.  
  1155.     int    PPCCmp64(ULONG,ULONG,ULONG,ULONG);
  1156.  
  1157.     FUNCTION
  1158.     Compares 2 64bit integers and returns the state of
  1159.     the comparision.
  1160.  
  1161.     INPUTS
  1162.     highA         - upper 32bit of value A
  1163.     lowA         - lower 32bit of value A
  1164.     highB         - upper 32bit of value B
  1165.     lowB         - lower 32bit of value B
  1166.  
  1167.     RESULT
  1168.     Result    -  0 A=B
  1169.                  +1 A>B
  1170.                  -1 A<B
  1171.     SEE ALSO
  1172.     PPCCmp64p()
  1173.  
  1174. PowerUPKernel/PPCCmp64p                               PowerUPKernel/PPCCmp64p
  1175.  
  1176.     NAME
  1177.     PPCCmp64p -- Compare 2 64bit integers
  1178.  
  1179.     SYNOPSIS
  1180.     Result = PPCCmp64p(ValueAPtr,ValueBPtr)
  1181.                        gpr3      gpr4
  1182.  
  1183.     LONG    PPCCmp64p(long long*,long long*);
  1184.  
  1185.     FUNCTION
  1186.     Compares 2 64bit integers and returns the state of
  1187.     the comparision.
  1188.  
  1189.     INPUTS
  1190.     ValueAPtr    - Ptr to 64Bit value A
  1191.     ValueBPtr    - Ptr to 64Bit value B
  1192.  
  1193.     RESULT
  1194.     Result    -  0 A=B
  1195.                  +1 A>B
  1196.                  -1 A<B
  1197.  
  1198.     SEE ALSO
  1199.     PPCCmp64()
  1200.  
  1201. PowerUPKernel/PPCCoerceMethodA                 PowerUPKernel/PPCCoerceMethodA
  1202.  
  1203.    NAME
  1204.     PPCCoerceMethodA -- Perform method on coerced object.
  1205.  
  1206.    SYNOPSIS
  1207.     result = PPCCoerceMethodA( cl, obj, msg )
  1208.  
  1209.     ULONG PPCCoerceMethodA( struct IClass *, Object *, Msg );
  1210.  
  1211.    FUNCTION
  1212.     Boopsi support function that invokes the supplied message
  1213.     on the specified object, as though it were the specified
  1214.     class.
  1215.  
  1216.    INPUTS
  1217.     cl - pointer to boopsi class to receive the message
  1218.     obj - pointer to boopsi object
  1219.     msg - pointer to method-specific message to send
  1220.  
  1221.    RESULT
  1222.     result - class and message-specific result.
  1223.  
  1224.    NOTES
  1225.     This function is not source portable.
  1226.  
  1227.    SEE ALSO
  1228.     PPCDoMethodA(), PPCDoSuperMethodA(), <intuition/classusr.h>
  1229.     ROM Kernel Manual boopsi section
  1230.  
  1231. PowerUPKernel/PPCCreateMessage                 PowerUPKernel/PPCCreateMessage
  1232.  
  1233.     NAME
  1234.     PPCCreateMessage -- Create a Message for a PPCMsgPort
  1235.  
  1236.     SYNOPSIS
  1237.     Message = PPCCreateMessage(PPCPort,Length)
  1238.     gpr3                       gpr3    gpr4
  1239.  
  1240.     void* PPCCreateMessage(void*,ULONG);
  1241.  
  1242.     FUNCTION
  1243.     Creates a Message for PPCPort communication.
  1244.     The Length parameter may be useful in the future to optimize
  1245.     messages in certain addressspace mappings for IPC in a MP system.
  1246.     It isn`t necessary to specify a Length which is > max(DataSize)
  1247.     but it may result in a performance win in the future.
  1248.     A message and msgdata can`t be reused or touched after a SendMessage
  1249.     until the message was replied.
  1250.  
  1251.     INPUTS
  1252.     PPCPort - Ptr to an object generated by PPCCreatePort
  1253.     Length  - Max Length for Messages
  1254.  
  1255.     RESULT
  1256.     PPCMessage - PPCMessage Object ptr.
  1257.  
  1258.     SEE ALSO
  1259.     PPCDeleteMessage(), powerup/ppclib/message.h
  1260.  
  1261. PowerUPKernel/PPCCreatePool                       PowerUPKernel/PPCCreatePool
  1262.  
  1263.     NAME
  1264.     PPCCreatePool -- Generate a private memory pool header
  1265.  
  1266.     SYNOPSIS
  1267.     newPool=PPCCreatePool(memFlags,puddleSize,threshSize)
  1268.     gpr3                  gpr3     gpr4       gpr5
  1269.  
  1270.     void *PPCCreatePool(ULONG,ULONG,ULONG);
  1271.  
  1272.     FUNCTION
  1273.     Allocate and prepare a new memory pool header.    Each pool is a
  1274.     separate tracking system for memory of a specific type.  Any number
  1275.     of pools may exist in the system.
  1276.  
  1277.     Pools automatically expand and shrink based on demand.    Fixed sized
  1278.     "puddles" are allocated by the pool manager when more total memory
  1279.     is needed.  Many small allocations can fit in a single puddle.
  1280.     Allocations larger than the threshSize are allocation in their own
  1281.     puddles.
  1282.  
  1283.     At any time individual allocations may be freed.  Or, the entire
  1284.     pool may be removed in a single step.
  1285.  
  1286.     INPUTS
  1287.     memFlags - a memory flags specifier, as taken by AllocMem.
  1288.  
  1289.       o exec/memory.h attributes
  1290.  
  1291.       o MEMF_NOCACHESYNCPPC for a synchronized non cacheable mapped
  1292.         memory area on the PPC side. The Amiga side is still copyback then.
  1293.         Synchronized means that accesses to that memory are in order
  1294.         for the CPU which is typically used for IO memory.
  1295.  
  1296.       o MEMF_NOCACHESYNCM68K for a synchronized non cacheable mapped
  1297.         memory area on the M68k side. The PPC side is still copyback then.
  1298.         Synchronized means that accesses to that memory are in order
  1299.         for the CPU which is typically used for IO memory.
  1300.  
  1301.       o MEMF_NOCACHEPPC for a nonsynchronized non cacheable mapped
  1302.         memory area on the PPC side. The Amiga side is still copyback then.
  1303.         Not Synchronized means that accesses to that memory may not be
  1304.         in order for the CPU which is typically used for framebuffer memory.
  1305.  
  1306.       o MEMF_NOCACHEM68K for a nosynchronized non cacheable mapped
  1307.         memory area on the M68k side. The PPC side is still copyback then.
  1308.         Not Synchronized means that accesses to that memory may not be
  1309.         in order for the CPU which is typically used for framebuffer memory.
  1310.  
  1311.       o MEMF_WRITETHROUGHPPC for writethrough mapped memory area on the
  1312.         PPC side. The 68k side is still copyback then.
  1313.         Writethrough means that the cache updates every write to the
  1314.         cache at once to the memory.
  1315.  
  1316.       o MEMF_WRITETHROUGH68K for writethrough mapped memory area on the
  1317.         68k side. The PPC side is still copyback then.
  1318.         Writethrough means that the cache updates every write to the
  1319.         cache at once to the memory.
  1320.  
  1321.       If you use the M68k and PPC attribute at the same time the memory
  1322.       is mapped noncacheable on both sides. This also means that your
  1323.       allocation is 4096 Bytes aligned that may waste memory if you need
  1324.       less ram.
  1325.  
  1326.     puddleSize - the size of Puddles...
  1327.     threshSize - the largest allocation that goes into normal puddles
  1328.                  This *MUST* be less than or equal to puddleSize
  1329.                  (CreatePool() will fail if it is not)
  1330.  
  1331.     RESULT
  1332.     The address of a new pool header, or NULL for error.
  1333.  
  1334.     SEE ALSO
  1335.     PPCDeletePool(), PPCAllocPooled(), PPCFreePooled(), exec/memory.i
  1336.  
  1337. PowerUPKernel/PPCCreatePort                       PowerUPKernel/PPCCreatePort
  1338.  
  1339.     NAME
  1340.     PPCCreatePort -- Create a PPC Message Port
  1341.  
  1342.     SYNOPSIS
  1343.     Port = PPCCreatePort(Tags)
  1344.     gpr3                 gpr3
  1345.  
  1346.     void* PPCCreatePort(struct TagItem*);
  1347.  
  1348.     FUNCTION
  1349.     Creates a local PPC MsgPort to receive messages from the PPC.
  1350.     With a specified name you can mark it public to the ppc.library.
  1351.     This shouldn`t be missunderstood as a public system port because
  1352.     PPCPorts and Amigaports are different entities.
  1353.  
  1354.     INPUTS
  1355.     Tags - Tags to specify a public port for example.
  1356.  
  1357.       o PPCPORTTAG_NAME,"Name"
  1358.         defines the name of a public PPC port.
  1359.  
  1360.       o PPCPORTTAG_ERROR,(ULONG*) ErrorPtr
  1361.         defines the ptr for a more precise return error result
  1362.  
  1363.     RESULT
  1364.     Port - the PPCPort object or NULL
  1365.  
  1366.     SEE ALSO
  1367.     PPCDeletePort(), powerup/ppclib/message.h
  1368.  
  1369. PowerUPKernel/PPCCreatePortList               PowerUPKernel/PPCCreatePortList
  1370.  
  1371.    NAME
  1372.     PPCCreatePortList -- Create a List of Ports to wait for
  1373.  
  1374.    SYNOPSIS
  1375.     PPCPortList = PPCCreatePortList(PPCPortArray,ExtSignals)
  1376.     gpr3                            gpr3         gpr4
  1377.  
  1378.     void* PPCCreatePortList(void**,ULONG);
  1379.  
  1380.    FUNCTION
  1381.     This function creates a multi PPCPort object you can
  1382.     use to wait for several ports at once.
  1383.     If necessary, the Wait function will be called to wait for
  1384.     the port signal.  If a message is already present at the
  1385.     port, this function will return immediately.  The return
  1386.     value is always a pointer to the first PPC Message queued (but
  1387.     it is not removed from the queue.
  1388.  
  1389.    INPUT
  1390.     PPCPortArray - a pointer to a PPC Message port array..NULL terminated
  1391.     ExtSignals   - mask of extended signals you wanna wait for
  1392.                    additionally to the PPCPorts.
  1393.  
  1394.    RESULT
  1395.     PPCMessage - a pointer to the first available PPC Message or NULL.
  1396.  
  1397.    SEE ALSO
  1398.     PPCGetMessage(), powerup/ppclib/message.h
  1399.  
  1400. PowerUPKernel/PPCCreateSemaphore             PowerUPKernel/PPCCreateSemaphore
  1401.  
  1402.    NAME
  1403.     PPCCreateSemaphore -- create a semaphore object
  1404.  
  1405.    SYNOPSIS
  1406.     PPCCreateSemaphore(Tags)
  1407.                        gpr3
  1408.  
  1409.     void* PPCCreateSemaphoreA(struct TagItem *Tags)
  1410.  
  1411.    FUNCTION
  1412.     creates a Semaphore object for the usage with the semaphore functions.
  1413.  
  1414.    INPUTS
  1415.     MyTags - Here you have to specify all needed Tags.
  1416.  
  1417.  
  1418.    RESULTS
  1419.     Semaphore - If NULL the error code is available through the
  1420.                    SEMAPHORETAG_ERROR
  1421.  
  1422.  
  1423.    SEE ALSO
  1424.     PPCObtainSemaphore(), PPCObtainSemaphoreByName(),
  1425.     PPCReleaseSemaphore(), PPCObtainSemaphoreShared(),
  1426.     PPCAttemptSemaphore(), PPCAttemptSemaphoreByName()
  1427.  
  1428. PowerUPKernel/PPCCreateTask                       PowerUPKernel/PPCCreateTask
  1429.  
  1430.     NAME
  1431.     PPCCreateTask -- Create a PPC Task
  1432.  
  1433.     SYNOPSIS
  1434.     TaskObject = PPCCreateTask( ElfObject, PC , Tags )
  1435.     gpr3                        gpr3       gpr4 gpr5
  1436.  
  1437.     void *PPCCreateTask(void*,void*,struct TagItem*);
  1438.  
  1439.     FUNCTION
  1440.     Creates an asynchron PPCTask with the given ElfObject
  1441.     and an optional code start. It works like the 68k
  1442.     ppc.library equivalent.
  1443.  
  1444.     Please check that autodocs entry for the tag
  1445.     description.
  1446.  
  1447.     INPUTS
  1448.     ElfObject - ElfObject created by PPCLoadObject
  1449.     PC        - optional task start or NULL for normal
  1450.                 ElfObject start.
  1451.     Tags      - Tags to specify a the PPCTasks attributes
  1452.  
  1453.     NOTE
  1454.     The TAG PPCTASKTAG_WAITFINISH if FALSE all the time so
  1455.     you can only create asynchron ppc tasks.
  1456.  
  1457.     SEE ALSO
  1458.     ppc.library/PPCCreateTask(), powerup/ppclib/tasks.h
  1459.  
  1460. PowerUPKernel/PPCCreateTimerObject         PowerUPKernel/PPCCreateTimerObject
  1461.  
  1462.    NAME
  1463.     PPCCreateTimerObject -- create a TimerObject
  1464.  
  1465.    SYNOPSIS
  1466.     TimerObject = PPCCreateTimerObject(Tags);
  1467.     gpr3                               gpr3
  1468.  
  1469.     void*    PPCCreateTimerObject(struct TagItem*);
  1470.  
  1471.    FUNCTION
  1472.  
  1473.    INPUT
  1474.     Tag  -- attribute
  1475.      o PPCTIMERTAG_CPU, BOOLEAN
  1476.        create a passive CPU tick object which you can only use
  1477.        to measure times between an event A and an event B.
  1478.  
  1479.      o PPCTIMERTAG_50HZ, Ticks
  1480.        create a notify timer job which notifies your task
  1481.        after 50Hz * Tick count.
  1482.  
  1483.      o PPCTIMERTAG_AUTOREMOVE, BOOLEAN
  1484.        to specify if the notify timer job is removed after the
  1485.        time ran down or if it should always run.
  1486.  
  1487.      o PPCTIMERTAG_SIGNALMASK, SignalMask
  1488.        the signal mask for PPCSignalTask() your task.
  1489.        Necessary if you wanna receive notify signals.
  1490.  
  1491.     ValuePtr   -- Ptr to an unsigned long long or ULONG[2] where
  1492.                   some optional value result. Not yet used.
  1493.  
  1494.    RESULT
  1495.     TimerObject -- a timerobject dependent on the tags
  1496.  
  1497.    SEE ALSO
  1498.     PPCDeleteTimerObject(), PPCGetTimerObject(), PPCSetTimerObject()
  1499.  
  1500. PowerUPKernel/PPCDeleteMessage                 PowerUPKernel/PPCDeleteMessage
  1501.  
  1502.     NAME
  1503.     PPCDeleteMessage -- Delete a PPC Message
  1504.  
  1505.     SYNOPSIS
  1506.     PPCDeleteMessage(PPCMessage)
  1507.                      gpr3
  1508.  
  1509.     void PPCDeleteMessage(void*);
  1510.  
  1511.     FUNCTION
  1512.     Deletes a PPC Message. You can only delete a msg your
  1513.     task allocated and which has already been replied or not
  1514.     send out.
  1515.  
  1516.     INPUTS
  1517.     PPCMessage - Ptr to an object generated by PPCCreateMessage
  1518.  
  1519.     SEE ALSO
  1520.     PPCCreatePort(), powerup/ppclib/message.h
  1521.  
  1522. PowerUPKernel/PPCDeletePool                       PowerUPKernel/PPCDeletePool
  1523.  
  1524.     NAME
  1525.     PPCDeletePool --  Drain an entire memory pool
  1526.  
  1527.     SYNOPSIS
  1528.     PPCDeletePool(poolHeader)
  1529.                   gpr3
  1530.  
  1531.     void PPCDeletePool(void *);
  1532.  
  1533.     FUNCTION
  1534.     Frees all memory in all pudles of the specified pool header, then
  1535.     deletes the pool header.  Individual free calls are not needed.
  1536.  
  1537.     INPUTS
  1538.     poolHeader - as returned by CreatePool().
  1539.  
  1540.     SEE ALSO
  1541.     PPCCreatePool(), PPCAllocPooled(), PPCFreePooled()
  1542.  
  1543. PowerUPKernel/PPCDeletePort                       PowerUPKernel/PPCDeletePort
  1544.  
  1545.     NAME
  1546.     PPCDeletePort -- Delete a PPC Message Port
  1547.  
  1548.     SYNOPSIS
  1549.     Success = PPCDeletePort(PPCPort)
  1550.     gpr3                    gpr3
  1551.  
  1552.     BOOL PPCDeletePort(void*);
  1553.  
  1554.     FUNCTION
  1555.     Deletes a local PPC MsgPort when the Port isn`t obtained
  1556.     by somebody else. If it`s obtained it returns FALSE so
  1557.     you have to decide yourself how you wanna recover this
  1558.     problem which maybe caused by a synchronizing problem
  1559.     between your M68k and PPC applications
  1560.  
  1561.     INPUTS
  1562.     PPCPort - PPCPort object generated by PPCCreatePort
  1563.  
  1564.     SEE ALSO
  1565.     PPCCreatePort(), powerup/ppclib/message.h
  1566.  
  1567. PowerUPKernel/PPCDeletePortList               PowerUPKernel/PPCDeletePortList
  1568.  
  1569.    NAME
  1570.     PPCDeletePortList -- Deletes a PortList object
  1571.  
  1572.    SYNOPSIS
  1573.     PPCDeletePortList(PPCPortList)
  1574.                       gpr3
  1575.  
  1576.     BOOL PPCDeletePortList(void*);
  1577.  
  1578.    FUNCTION
  1579.     This function deletes the PPCPortList object.
  1580.  
  1581.    INPUT
  1582.     PPCPortList - a pointer to the PPCPortList object
  1583.  
  1584.    RESULT
  1585.     Success - A Boolean tells you if the operation was successful.
  1586.  
  1587.    SEE ALSO
  1588.     PPCCreatePortList(), powerup/ppclib/message.h
  1589.  
  1590. PowerUPKernel/PPCDeleteSemaphore             PowerUPKernel/PPCDeleteSemaphore
  1591.  
  1592.    NAME
  1593.     PPCDeleteSemaphore -- delete Semaphore
  1594.  
  1595.    SYNOPSIS
  1596.     PPCDeleteSemaphore(Semaphore)
  1597.                        gpr3
  1598.  
  1599.     void PPCDeleteSemaphore(void*)
  1600.  
  1601.    FUNCTION
  1602.     deletes a Semaphore. If it can't delete it because
  1603.     of a remaining a PPCObtainSemaphore, the semaphore
  1604.     is deleted afterwards.
  1605.  
  1606.    INPUTS
  1607.        Semaphore -- a semaphore object returned by PPCCreateSemaphore()
  1608.  
  1609.    SEE ALSO
  1610.     PPCCreateSemaphore()
  1611.  
  1612. PowerUPKernel/PPCDeleteTimerObject         PowerUPKernel/PPCDeleteTimerObject
  1613.  
  1614.    NAME
  1615.     PPCDeleteTimerObject -- delete a TimerObject
  1616.  
  1617.    SYNOPSIS
  1618.     PPCDeleteTimerObject(TimerObject);
  1619.                      gpr3
  1620.  
  1621.     void    PPCDeleteTimerObject(void*);
  1622.  
  1623.    FUNCTION
  1624.     Delete the TimerObject.
  1625.  
  1626.    INPUT
  1627.        TimerObject -- object to be deleted.
  1628.  
  1629.    SEE ALSO
  1630.     PPCCreateTimerObject(), PPCGetTimerObject(), PPCSetTimerObject()
  1631.  
  1632. PowerUPKernel/PPCDivRem64                           PowerUPKernel/PPCDivRem64
  1633.  
  1634.     NAME
  1635.     PPCDivRem64 -- Div+Mod 2 64 bit integer values (V46)
  1636.  
  1637.     SYNOPSIS
  1638.     Value    =    PPCDivRem64(ValueA ,  ValueB, ModResultPtr)
  1639.     gpr3:gpr4                   gpr3:gpr4  gpr5:gpr6  gpr7
  1640.  
  1641.     long long PPCDivRem64(long long, long long,long long*);
  1642.  
  1643.     FUNCTION
  1644.     Devide 2 long long values, return a long long result and
  1645.     return the modulu result at the ModResultPtr`s address.
  1646.  
  1647.     INPUTS
  1648.     ValueA       - long long value A
  1649.     ValueB       - long long value B
  1650.     ModResultPtr - ptr to the modulo result or NULL
  1651.  
  1652.     RESULT
  1653.     Value - long long result
  1654.     ModResultPtr - ptr to the modulo result or NULL
  1655.  
  1656.     NOTES
  1657.     SAS PPC unfortunately has no 64bit integer support, so you
  1658.     should look for the PTR functions.
  1659.  
  1660.     SEE ALSO
  1661.     PPCDivRem64p()
  1662.  
  1663. PowerUPKernel/PPCDivRem64p                         PowerUPKernel/PPCDivRem64p
  1664.  
  1665.     NAME
  1666.     PPCDivRem64p -- DivRem 2 64 bit integer values (V46)
  1667.  
  1668.     SYNOPSIS
  1669.     PPCDivRem64p(ValuePtrA, ValuePtrB, ModResultPtr)
  1670.                  gpr3       gpr4       gpr7
  1671.  
  1672.     void    PPCDivRem64p(long*,long*,long*);
  1673.  
  1674.     FUNCTION
  1675.     Devide 2 long long values, returns the result at ValuePtrA
  1676.     and the modulu at the ModResultPtr`s address.
  1677.  
  1678.     INPUTS
  1679.     ValuePtrA - ptr to a long long value A
  1680.     ValuePtrB - ptr to a long long value B
  1681.     ModResultPtr - ptr to the modulo result or NULL
  1682.  
  1683.     RESULT
  1684.     ValuePtrA    - long long result is written to the ValuePtrA address.
  1685.     ModResultPtr - ptr to the modulo result or NULL
  1686.  
  1687.     SEE ALSO
  1688.     PPCDivRem64()
  1689.  
  1690. PowerUPKernel/PPCDivs64                               PowerUPKernel/PPCDivs64
  1691.  
  1692.     NAME
  1693.     PPCDivs64 -- Divide 2 signed 64bit integers
  1694.  
  1695.     SYNOPSIS
  1696.     Result = PPCDivs64(highA,lowA,highB,lowB )
  1697.     gpr3:gpr4         gpr3  gpr4 gpr5  gpr6
  1698.  
  1699.     long    PPCDivs64(ULONG,ULONG,ULONG,ULONG);
  1700.  
  1701.     FUNCTION
  1702.     Multiplies 2 signed 64bit integers and
  1703.     returns the 64bit result in A.
  1704.  
  1705.     INPUTS
  1706.     highA         - upper 32bit of value A
  1707.     lowA         - lower 32bit of value A
  1708.     highB         - upper 32bit of value B
  1709.     lowB         - lower 32bit of value B
  1710.  
  1711.     RESULT
  1712.     Result    - 64Bit result devided into 2 registers
  1713.  
  1714.     SEE ALSO
  1715.     PPCDivs64p()
  1716.  
  1717. PowerUPKernel/PPCDivs64p                             PowerUPKernel/PPCDivs64p
  1718.  
  1719.     NAME
  1720.     PPCDivs64p -- Divide 2 signed 64bit integers
  1721.  
  1722.     SYNOPSIS
  1723.     PPCDivs64p(ValueAPtr,ValueBPtr)
  1724.                gpr3      gpr4
  1725.  
  1726.     void    PPCDivs64p(long long*,long long*);
  1727.  
  1728.     FUNCTION
  1729.     Multiplies 2 signed 64bit integers and
  1730.     returns the 64bit result in A.
  1731.  
  1732.     INPUTS
  1733.     ValueAPtr    - Ptr to 64Bit value A
  1734.     ValueBPtr    - Ptr to 64Bit value B
  1735.  
  1736.     SEE ALSO
  1737.     PPCDivs64()
  1738.  
  1739. PowerUPKernel/PPCDivu64                               PowerUPKernel/PPCDivu64
  1740.  
  1741.     NAME
  1742.     PPCDivu64 -- Divide 2 unsigned 64bit integers
  1743.  
  1744.     SYNOPSIS
  1745.     Result = PPCDivu64(highA,lowA,highB,lowB )
  1746.     gpr3:gpr4         gpr3  gpr4 gpr5  gpr6
  1747.  
  1748.     long    PPCDivu64(ULONG,ULONG,ULONG,ULONG);
  1749.  
  1750.     FUNCTION
  1751.     Multiplies 2 unsigned 64bit integers and
  1752.     returns the 64bit result in A.
  1753.  
  1754.     INPUTS
  1755.     highA         - upper 32bit of value A
  1756.     lowA         - lower 32bit of value A
  1757.     highB         - upper 32bit of value B
  1758.     lowB         - lower 32bit of value B
  1759.  
  1760.     RESULT
  1761.     Result    - 64Bit result devided into 2 registers
  1762.  
  1763.     SEE ALSO
  1764.     PPCDivu64p()
  1765.  
  1766. PowerUPKernel/PPCDivu64p                             PowerUPKernel/PPCDivu64p
  1767.  
  1768.     NAME
  1769.     PPCDivu64p -- Divide 2 unsigned 64bit integers
  1770.  
  1771.     SYNOPSIS
  1772.     PPCDivu64p(ValueAPtr,ValueBPtr)
  1773.                gpr3      gpr4
  1774.  
  1775.     void    PPCDivu64p(long long*,long long*);
  1776.  
  1777.     FUNCTION
  1778.     Multiplies 2 unsigned 64bit integers and
  1779.     returns the 64bit result in A.
  1780.  
  1781.     INPUTS
  1782.     ValueAPtr    - Ptr to 64Bit value A
  1783.     ValueBPtr    - Ptr to 64Bit value B
  1784.  
  1785.     SEE ALSO
  1786.     PPCDivu64()
  1787.  
  1788. PowerUPKernel/PPCDoMethodA                         PowerUPKernel/PPCDoMethodA
  1789.  
  1790.    NAME
  1791.     PPCDoMethodA -- Perform method on object.
  1792.  
  1793.    SYNOPSIS
  1794.     result = PPCDoMethodA( obj, msg )
  1795.  
  1796.     ULONG PPCDoMethodA( Object *, Msg );
  1797.  
  1798.    FUNCTION
  1799.     Boopsi support function that invokes the supplied message
  1800.     on the specified object.  The message is invoked on the
  1801.     object's true class.
  1802.  
  1803.    INPUTS
  1804.     obj - pointer to boopsi object
  1805.     msg - pointer to method-specific message to send
  1806.  
  1807.    RESULT
  1808.     result - specific to the message and the object's class.
  1809.  
  1810.    NOTES
  1811.     This function is not source portable.
  1812.  
  1813.    SEE ALSO
  1814.     PPCCoerceMethodA(), PPCDoSuperMethodA(), <intuition/classusr.h>
  1815.     ROM Kernel Manual boopsi section
  1816.  
  1817. PowerUPKernel/PPCDoSuperMethodA               PowerUPKernel/PPCDoSuperMethodA
  1818.  
  1819.    NAME
  1820.     PPCDoSuperMethodA -- Perform method on object coerced to superclass.
  1821.  
  1822.    SYNOPSIS
  1823.     result = PPCDoSuperMethodA( cl, obj, msg )
  1824.  
  1825.     ULONG PPCDoSuperMethodA( struct IClass *, Object *, Msg );
  1826.  
  1827.    FUNCTION
  1828.     Boopsi support function that invokes the supplied message
  1829.     on the specified object, as though it were the superclass
  1830.     of the specified class.
  1831.  
  1832.    INPUTS
  1833.     cl - pointer to boopsi class whose superclass is to
  1834.          receive the message
  1835.     obj - pointer to boopsi object
  1836.     msg - pointer to method-specific message to send
  1837.  
  1838.    RESULT
  1839.     result - class and message-specific result.
  1840.  
  1841.    NOTES
  1842.     This function is not source portable.
  1843.  
  1844.    SEE ALSO
  1845.     PPCCoerceMethodA(), PPCDoMethodA(), <intuition/classusr.h>
  1846.     ROM Kernel Manual boopsi section
  1847.  
  1848. PowerUPKernel/PPCEnqueue                             PowerUPKernel/PPCEnqueue
  1849.  
  1850.    NAME
  1851.     PPCEnqueue -- insert or append node to a system queue
  1852.  
  1853.    SYNOPSIS
  1854.     PPCEnqueue(list, node)
  1855.                gpr3  gpr4 
  1856.  
  1857.     void PPCEnqueue(struct List *, struct Node *);
  1858.  
  1859.    FUNCTION
  1860.     Insert or append a node into a system queue.  The insert is
  1861.     performed based on the node priority -- it will keep the list
  1862.     properly sorted.  New nodes will be inserted in front of the first
  1863.     node with a lower priority.   Hence a FIFO queue for nodes of equal
  1864.     priority
  1865.  
  1866.    WARNING
  1867.     This function does not arbitrate for access to the list.  The
  1868.     calling task must be the owner of the involved list.
  1869.  
  1870.    INPUTS
  1871.     list - a pointer to the system queue header
  1872.     node - the node to enqueue.  This must be a full featured node
  1873.            with type, priority and name fields.
  1874.  
  1875.    SEE ALSO
  1876.     PPCAddHead(), PPCAddTail(),
  1877.     PPCInsert(), PPCRemove(),
  1878.     PPCRemHead(), PPCRemTail()
  1879.  
  1880. PowerUPKernel/PPCEnqueueSync                     PowerUPKernel/PPCEnqueueSync
  1881.  
  1882.    NAME
  1883.     PPCEnqueueSync -- sync insert or append node to a system queue
  1884.  
  1885.    SYNOPSIS
  1886.     PPCEnqueueSync(list, node)
  1887.                    gpr3  gpr4 
  1888.  
  1889.     void PPCEnqueueSync(struct List *, struct Node *);
  1890.  
  1891.    FUNCTION
  1892.     Insert or append a node into a system queue.  The insert is
  1893.     performed based on the node priority -- it will keep the list
  1894.     properly sorted.  New nodes will be inserted in front of the first
  1895.     node with a lower priority.   Hence a FIFO queue for nodes of equal
  1896.     priority
  1897.  
  1898.    INPUTS
  1899.     list - a pointer to the system queue header
  1900.     node - the node to enqueue.  This must be a full featured node
  1901.            with type, priority and name fields.
  1902.  
  1903.    SEE ALSO
  1904.     PPCAddHeadSync(), PPCAddTailSync(),
  1905.     PPCInsertSync(), PPCRemoveSync(),
  1906.     PPCRemHeadSync(), PPCRemTailSync()
  1907.  
  1908. PowerUPKernel/PPCFindName                           PowerUPKernel/PPCFindName
  1909.  
  1910.    NAME
  1911.     PPCFindName -- find a system list node with a given name
  1912.  
  1913.    SYNOPSIS
  1914.     node = PPCFindName(start, name)
  1915.     gpr3               gpr3  gpr4
  1916.  
  1917.     struct Node *PPCFindName(struct List *, STRPTR);
  1918.  
  1919.    FUNCTION
  1920.     Traverse a system list until a node with the given name is found.
  1921.     To find multiple occurrences of a string, this function may be
  1922.     called with a node starting point.
  1923.  
  1924.    WARNING
  1925.     This function does not arbitrate for access to the list.  The
  1926.     calling task must be the owner of the involved list.
  1927.  
  1928.    INPUTS
  1929.     start - a list header or a list node to start the search
  1930.             (if node, this one is skipped)
  1931.     name - a pointer to a name string terminated with NULL
  1932.  
  1933.    RESULTS
  1934.     node - a pointer to the node with the same name else
  1935.            NULL to indicate that the string was not found.
  1936.  
  1937. PowerUPKernel/PPCFindNameSync                   PowerUPKernel/PPCFindNameSync
  1938.  
  1939.    NAME
  1940.     PPCFindNameSync -- sync find a system list node with a given name
  1941.  
  1942.    SYNOPSIS
  1943.     node = PPCFindNameSync(start, name)
  1944.     gpr3                   gpr3  gpr4
  1945.  
  1946.     struct Node *PPCFindNameSync(struct List *, STRPTR);
  1947.  
  1948.    FUNCTION
  1949.     Traverse a system list until a node with the given name is found.
  1950.     To find multiple occurrences of a string, this function may be
  1951.     called with a node starting point.
  1952.  
  1953.    INPUTS
  1954.     start - a list header or a list node to start the search
  1955.             (if node, this one is skipped)
  1956.     name - a pointer to a name string terminated with NULL
  1957.  
  1958.    RESULTS
  1959.     node - a pointer to the node with the same name else
  1960.         zero to indicate that the string was not found.
  1961.  
  1962. PowerUPKernel/PPCFindTagItem                     PowerUPKernel/PPCFindTagItem
  1963.  
  1964.     NAME
  1965.     PPCFindTagItem -- Scans TagItem list for a Tag.
  1966.  
  1967.     SYNOPSIS
  1968.     tag = PPCFindTagItem( tagVal, tagList)
  1969.     gpr3             gpr3     gpr4
  1970.  
  1971.     struct TagItem *PPCFindTagItem(Tag tagVal,struct TagItem *tagList);
  1972.  
  1973.     FUNCTION
  1974.     Scans a TagItem "List", which is in fact a chain of arrays
  1975.     of TagItem structures as defined in utility/tagitem.h.
  1976.     Returns a pointer to the FIRST item with ti_Tag matching the
  1977.     'TagVal' parameter.
  1978.  
  1979.     INPUTS
  1980.     tagVal         - Tag value to search for.
  1981.     tagList        - beginning of TagItem list to scan.
  1982.  
  1983.     RESULT
  1984.     Returns a pointer to the item with ti_Tag matching 'TagVal'.
  1985.     Returns NULL if there is no match or if TagList is NULL.
  1986.  
  1987.     SEE ALSO
  1988.     utility/tagitem.h, PPCGetTagData(), PPCNextTagItem()
  1989.  
  1990. PowerUPKernel/PPCFindTask                           PowerUPKernel/PPCFindTask
  1991.  
  1992.    NAME
  1993.     PPCFindTask -- find a PPC task with the given name or find oneself
  1994.  
  1995.    SYNOPSIS
  1996.     task = PPCFindTask(name)
  1997.     gpr3           gpr4
  1998.  
  1999.     void* PPCFindTask(char*);
  2000.  
  2001.    FUNCTION
  2002.     This function will check all PPC task queues for a task with
  2003.     the given name, and return a pointer to its task control block.
  2004.     If a NULL name pointer is given a pointer to the current task
  2005.     will be    returned.
  2006.  
  2007.     Finding oneself with a NULL for the name is very quick.  Finding a
  2008.     task by name is very system expensive, and will disable PPCTask
  2009.     switching for a long time.
  2010.  
  2011.    INPUT
  2012.     name - pointer to a name string
  2013.  
  2014.    RESULT
  2015.     PPCtask - PPCTask Object
  2016.  
  2017. PowerUPKernel/PPCFinishTask                       PowerUPKernel/PPCFinishTask
  2018.  
  2019.     NAME
  2020.     PPCFinishTask -- End your PPC Task
  2021.  
  2022.     SYNOPSIS
  2023.     PPCFindishTask(Result)
  2024.  
  2025.     void PPCFinishTask(ULONG)
  2026.  
  2027.     FUNCTION
  2028.     Ends the current task and removes it from the tasklist.
  2029.     Then it sends the M68k Msgtask the Finish Msg which may
  2030.     send back the Startup message or notify the debugger
  2031.     by the exit of the ppc task.
  2032.     This function doesn`t free the ElfObject.
  2033.  
  2034.    RESULT
  2035.     Result - Result code of the task.
  2036.  
  2037.    SEE ALSO
  2038.     ppc.library/PPCDeleteTask()
  2039.  
  2040. PowerUPKernel/PPCfprintf                             PowerUPKernel/PPCfprintf
  2041.  
  2042.     NAME
  2043.     PPCfprintf -- formatted print
  2044.  
  2045.     SYNOPSIS
  2046.     Length = PPCfprintf(File, FmtString, ...)
  2047.     gpr3                gpr3  gpr4
  2048.  
  2049.     int PPCfprintf(void*, const char*, ...);
  2050.  
  2051.     FUNCTION
  2052.     does a format output to a file with stack parameters.
  2053.  
  2054.     INPUTS
  2055.     File      - File returned by PPCOpen
  2056.     FmtString - FmtString described in PPCRawDoFmt()
  2057.  
  2058.     RESULT
  2059.     Length - count of char output
  2060.  
  2061.     SEE ALSO
  2062.     PPCvfprintf
  2063.  
  2064. PowerUPKernel/PPCFreeMem                             PowerUPKernel/PPCFreeMem
  2065.  
  2066.     NAME
  2067.     PPCFreeMem -- Frees a PPC cache aligned memory block
  2068.  
  2069.     SYNOPSIS
  2070.     PPCFreeMem(Memory,size)
  2071.                gpr3   gpr4
  2072.  
  2073.     void PPCFreeMem(APTR,ULONG);
  2074.  
  2075.     FUNCTION
  2076.     Frees a memoryblock which was allocated by PPCAllocMem
  2077.  
  2078.     INPUTS
  2079.     MemoryBlock    - memory block
  2080.     Size         - memory block size
  2081.  
  2082.     NOTES
  2083.     The reason for this routine is that there's a serious
  2084.     cache copyback problem when ppc cache line and 68060 cache line
  2085.     cross borders. Then the contents of the memory isn't guranteed.
  2086.     The cache issue is explained in detail in Docs/PowerUP.guide
  2087.  
  2088.     SEE ALSO
  2089.     PPCAllocMem(), exec/memory.h
  2090.  
  2091. PowerUPKernel/PPCFreePooled                       PowerUPKernel/PPCFreePooled
  2092.  
  2093.     NAME
  2094.     PPCFreePooled -- Free pooled memory
  2095.  
  2096.     SYNOPSIS
  2097.     PPCFreePooled(poolHeader,memory,memSize)
  2098.                   gpr3       gpr4   gpr5
  2099.  
  2100.     void PPCFreePooled(void *,void *,ULONG);
  2101.  
  2102.     FUNCTION
  2103.     Deallocates memory allocated by AllocPooled().  The size of the
  2104.     allocation *MUST* match the size given to AllocPooled().
  2105.     The reason the pool functions do not track individual allocation
  2106.     sizes is because many of the uses of pools have small allocation
  2107.     sizes and the tracking of the size would be a large overhead.
  2108.  
  2109.     Only memory allocated by AllocPooled() may be freed with this
  2110.     function!
  2111.  
  2112.     Doing a DeletePool() on the pool will free all of the puddles
  2113.     and thus all of the allocations done with AllocPooled() in that
  2114.     pool.  (No need to FreePooled() each allocation)
  2115.  
  2116.     INPUTS
  2117.     memory - pointer to memory allocated by AllocPooled.
  2118.     poolHeader - a specific private pool header.
  2119.  
  2120.     NOTES
  2121.     The pool function do not protect an individual pool from
  2122.     multiple accesses.  The reason is that in most cases the pools
  2123.     will be used by a single task.  If your pool is going to
  2124.     be used by more than one task you must Semaphore protect
  2125.     the pool from having more than one task trying to allocate
  2126.     within the same pool at the same time.
  2127.  
  2128.     SEE ALSO
  2129.     PPCAllocPooled(), PPCCreatePool(), PPCDeletePool()
  2130.  
  2131. PowerUPKernel/PPCFreeSignal                       PowerUPKernel/PPCFreeSignal
  2132.  
  2133.    NAME
  2134.     PPCFreeSignal -- free a signal PPC task bit
  2135.  
  2136.    SYNOPSIS
  2137.     PPCFreeSignal(signalNum)
  2138.               gpr3
  2139.  
  2140.     void PPCFreeSignal(ULONG);
  2141.  
  2142.    FUNCTION
  2143.     This function frees a previously allocated signal bit for reuse.
  2144.     This call must be performed while running in the same PPC task
  2145.     in which the signal was allocated.
  2146.  
  2147.    INPUTS
  2148.     signalNum - the signal number to free {0..31}.
  2149.  
  2150.    SEE ALSO
  2151.     PPCAllocSignal()
  2152.  
  2153. PowerUPKernel/PPCFreeVec                             PowerUPKernel/PPCFreeVec
  2154.  
  2155.    NAME
  2156.     PPCFreeVec -- return PPCAllocVec() memory to the system
  2157.  
  2158.    SYNOPSIS
  2159.     PPCFreeVec(memoryBlock)
  2160.             gpr3
  2161.  
  2162.     void PPCFreeVec(void *);
  2163.  
  2164.    FUNCTION
  2165.     Free an allocation made by the PPCAllocVec() call.  The memory will
  2166.     be returned to the system pool from which it came.
  2167.  
  2168.    INPUTS
  2169.     memoryBlock - pointer to the memory block to free, or NULL.
  2170.  
  2171.    SEE ALSO
  2172.     PPCAllocVec(), exec/memory.h
  2173.  
  2174. PowerUPKernel/PPCFreeVecPooled                 PowerUPKernel/PPCFreeVecPooled
  2175.  
  2176.    NAME
  2177.     PPCFreeVecPooled -- return PPCAllocVecPooled() memory to the system
  2178.  
  2179.    SYNOPSIS
  2180.     PPCFreeVecPooled(Pool,memoryBlock)
  2181.                      gpr3 gpr4
  2182.  
  2183.     void PPCFreeVecPooled(void*,void *);
  2184.  
  2185.    FUNCTION
  2186.     Free an allocation made by the PPCAllocVecPooled() call.  The memory will
  2187.     be returned to the system pool from which it came.
  2188.  
  2189.    INPUTS
  2190.     memoryBlock - pointer to the memory block to free, or NULL.
  2191.  
  2192.    SEE ALSO
  2193.     PPCAllocVecPooled()
  2194.  
  2195. PowerUPKernel/PPCGetAttr                             PowerUPKernel/PPCGetAttr
  2196.  
  2197.     NAME
  2198.     PPCGetAttr -- Get PPC Attr                     (V45)
  2199.  
  2200.     SYNOPSIS
  2201.     Result = PPCGetAttr(Tag)
  2202.     gpr3                 gpr3
  2203.  
  2204.     ULONG PPCGetAttr(ULONG);
  2205.  
  2206.     FUNCTION
  2207.     Gives you infos about the PPC enviroment depending on the tag.
  2208.  
  2209.     BUGS
  2210.     I can`t remember anymore what ridden me when i added this
  2211.     function to the PPC side. For some reason it`s not equal
  2212.     to the 68k side`s function.
  2213.     Anyway...it`s not that bad in the end.
  2214.     You can`t specify any CPU as on the 68k side.
  2215.     And the real annoyance..but now documented..PPCINFOTAG_PLL
  2216.     returned the PLL << 28 instead of in the lower 4 bits.
  2217.     It simply returned the hid1 registers.
  2218.     On the 68k lib side that was correct.
  2219.     Too bad nobody send a bugreport close after the damage was
  2220.     done.
  2221.  
  2222.     INPUTS
  2223.     Tags - The supported tags
  2224.  
  2225.     o PPCINFOTAG_CPU
  2226.       returns the version of the processor to detect the PPC
  2227.       type the system is running on. See your PowerPC Manuals
  2228.       "pvr" descriptions and check out the include "/ppclib/ppc.h.
  2229.       Use the ti_Data field as the processor number.
  2230.  
  2231.     o PPCINFOTAG_CPUREV
  2232.       returns the revision of the processor.
  2233.     
  2234.     o PPCINFOTAG_CPUCOUNT
  2235.       returns the numbers of processors
  2236.  
  2237.     o PPCINFOTAG_CPUCLOCK
  2238.       returns the clock of the cpu in Mhz.
  2239.  
  2240.     o PPCINFOTAG_CPUPLL (V45)
  2241.       returns the clock devider of the cpu.
  2242.       (PLL << 28) == hid1 output.
  2243.       Look at the described bugs above.
  2244.       (Please don`t use this..as it`s hw dependent anyway)
  2245.  
  2246.     RESULT
  2247.     result    - depends on the requested Tags
  2248.  
  2249.     SEE ALSO
  2250.     ppclib/ppc.h
  2251.  
  2252. PowerUPKernel/PPCGetLibSymbol                   PowerUPKernel/PPCGetLibSymbol
  2253.  
  2254.    NAME
  2255.     PPCGetLibSymbol -- Get a symbol of a Shared Object (V46)
  2256.  
  2257.    SYNOPSIS
  2258.     Value = PPCGetLibSymbol(LibObject,Symbol)
  2259.  
  2260.     void*    PPCGetLibSymbol(void*,char*);
  2261.                             gpr3  gpr4
  2262.  
  2263.    FUNCTION
  2264.     Get the value of a shared elf object symbol.
  2265.  
  2266.    INPUTS
  2267.     LibObject - shared library object
  2268.     Name      - name of the symbol
  2269.  
  2270.    RESULT
  2271.     Value     - depending on the symbol type it`s a ptr or a value
  2272.  
  2273.    NOTES
  2274.     Simular to the NetBSD dlopen(), dlclose(), dlsym() interface.
  2275.     If there`s a working ld a dynamic symbol link shouldn`t be
  2276.     the problem anymore but at the moment LD isn`t useful.
  2277.  
  2278.    SEE ALSO
  2279.     PPCOpenLibrary(), PPCCloseLibrary()
  2280.  
  2281. PowerUPKernel/PPCGetMessage                       PowerUPKernel/PPCGetMessage
  2282.  
  2283.     NAME
  2284.     PPCGetMessage -- Gets a PPC Message from a PPC Port
  2285.  
  2286.     SYNOPSIS
  2287.     Message = PPCGetMessage(PPCPort)
  2288.     gpr3                    gpr3
  2289.  
  2290.     void* PPCGetMessage(void*);
  2291.  
  2292.     FUNCTION
  2293.     Checks for a message in the PPCPort`s msglist and removes
  2294.     it from the queue.
  2295.     Until you haven`t replied the PPC Message you can read from
  2296.     the embedded Data field informations. You MUST NOT write to
  2297.     these informations.
  2298.  
  2299.     INPUTS
  2300.     PPCPort - Ptr to PPC Port
  2301.  
  2302.     RESULT
  2303.     PPCMessage - First PPC Message in the PPC Port msglist or NULL if the
  2304.                  the msglist is empty.
  2305.  
  2306.     SEE ALSO
  2307.     PPCReplyMessage(), PPCCreateMessage(),
  2308.     powerup/ppclib/message.h
  2309.  
  2310. PowerUPKernel/PPCGetMessageAttr               PowerUPKernel/PPCGetMessageAttr
  2311.  
  2312.     NAME
  2313.     PPCGetMessageAttr -- Get Infos about a PPC Message
  2314.  
  2315.     SYNOPSIS
  2316.     Result = PPCGetMessageAttr(PPCMessage,Attr)
  2317.     gpr3                       gpr3       gpr4
  2318.  
  2319.     ULONG PPCGetMessageAttr(void*,ULONG);
  2320.  
  2321.     FUNCTION
  2322.     Returns informations about a PPC Message. This way you
  2323.     can get a Ptr to the Data the message transports and
  2324.     the length of the message.
  2325.  
  2326.     INPUTS
  2327.     PPCMessage - Ptr to an object generated by PPCCreateMessage
  2328.     Attr       - Information Attribute
  2329.       o PPCMSGTAG_DATA
  2330.         returns the Data parameter of the PPC Message.
  2331.         The Data field is most of a time a memory ptr
  2332.         but if the length of the message is 0 it can
  2333.         also be used as an additional msgid.
  2334.       o PPCMSGTAG_DATALENGTH
  2335.         returns the Length of the PPC Message. If the
  2336.         Length is NULL this Message needed no cacheflush
  2337.         and therefore is very fast. If Length is NULL the
  2338.         the Data field can be used as an additional msgid.
  2339.       o PPCMSGTAG_MSGID
  2340.         returns the MSGID of the PPC Message. This may be
  2341.         useful to mark certain msgs to be from a certain
  2342.         type which may simplify the handling of messages.
  2343.  
  2344.     RESULT
  2345.     Result - Returns the informations you requested by the
  2346.              attribute.
  2347.  
  2348.     SEE ALSO
  2349.     PPCGetMessage(), powerup/ppclib/message.h
  2350.  
  2351. PowerUPKernel/PPCGetObjectAttrs               PowerUPKernel/PPCGetObjectAttrs
  2352.  
  2353.     NAME
  2354.     PPCGetObjectAttrs -- Get Elf Object File(s) information (V46)
  2355.  
  2356.     SYNOPSIS
  2357.     Result = PPCGetObjectAttrs(ElfObject,PPCObjectInfo,Tags )
  2358.     gpr3                   gpr3      gpr4          gpr5
  2359.  
  2360.     ULONG    PPCGetObjectAttrs(void*,struct PPCObjectInfo*,struct TagItem*);
  2361.  
  2362.     FUNCTION
  2363.     Gives you certain informations about an ELF PPC binary object
  2364.     or all loaded Elf objects. This way you could get certain
  2365.     symbols,types and all that.
  2366.  
  2367.     INPUTS
  2368.     ElfObject     - ElfObject returned by PPCLoadObject()
  2369.     Tags        - Array of Tags
  2370.  
  2371.     RESULT
  2372.  
  2373.     NOTES
  2374.     ELF will be the only format allowed the PowerUP. We don't
  2375.     want alien formats.
  2376.  
  2377.     BUGS
  2378.     Probably a lot
  2379.  
  2380.     SEE ALSO
  2381.     PPCLoadObject(), powerup/ppclib/object.h
  2382.  
  2383. PowerUPKernel/PPCGetPortListAttr             PowerUPKernel/PPCGetPortListAttr
  2384.  
  2385.     NAME
  2386.     PPCGetPortListAttr -- Get Infos about a PPC PortList
  2387.  
  2388.     SYNOPSIS
  2389.     Result = PPCGetPortListAttr(PPCPortList,Attr)
  2390.     gpr3                        gpr3        gpr4
  2391.  
  2392.     ULONG PPCGetPortListAttr(void*,ULONG);
  2393.  
  2394.     FUNCTION
  2395.     Returns informations about a PPC PortList. This way you
  2396.     can get the needed received signal mask in the case you
  2397.     use the extended signalmask
  2398.  
  2399.     INPUTS
  2400.     PPCPortList - Ptr to a PPCPortList object
  2401.     Attr        - Information Attribute
  2402.       o PPCPORTLISTTAG_EXTENDEDSIGNALS
  2403.         returns the extended signal mask.
  2404.       o PPCPORTLISTTAG_RECEIVEDSIGNALS
  2405.         returns the received signal mask. You need this to see
  2406.         if a msg was received AND if you also got a signal from
  2407.         the extended signalmask.
  2408.  
  2409.     SEE ALSO
  2410.     PPCCreatePortList(), PPCPortList(),
  2411.     powerup/ppclib/message.h
  2412.  
  2413. PowerUPKernel/PPCGetTagData                       PowerUPKernel/PPCGetTagData
  2414.  
  2415.     NAME
  2416.     PPCGetTagData -- Obtain data corresponding to Tag.
  2417.  
  2418.     SYNOPSIS
  2419.     value = PPCGetTagData(tagVal, default, tagList)
  2420.     gpr3              gpr3    gpr4    gpr5
  2421.  
  2422.     ULONG PPCGetTagData(Tag TagVal, ULONG Default, struct TagItem *TagList)
  2423.  
  2424.     FUNCTION
  2425.     Searches a TagItem list for a matching Tag value, and returns the
  2426.     corresponding ti_Data value for the TagItem found.  If none
  2427.     found, will return the value passed it as 'default'.
  2428.  
  2429.     INPUTS
  2430.     tagVal         - Tag value to search for.
  2431.     default        - value to be returned if tagVal is not found.
  2432.     tagList     - the TagItem list to search.
  2433.  
  2434.     RESULT
  2435.     value        - The ti_Data value for first matching TagItem, or
  2436.               'default' if a ti_Tag matching 'Tag' is not found.
  2437.     SEE ALSO
  2438.     utility/tagitem.h, PPCFindTagItem(), PPCNextTagItem()
  2439.  
  2440. PowerUPKernel/PPCGetTaskAttr                     PowerUPKernel/PPCGetTaskAttr
  2441.  
  2442.     NAME
  2443.     PPCGetTaskAttr -- Get PPC Task Attributes
  2444.  
  2445.     SYNOPSIS
  2446.     Result = PPCGetTaskAttr(Tag)
  2447.     gpr3            gpr3
  2448.  
  2449.     ULONG PPCGetTaskAttr(ULONG);
  2450.  
  2451.     FUNCTION
  2452.     Gives you infos about your task. This function isn`t as flexible
  2453.     the AmigaOS ppc.library function. Please check the include which
  2454.     Tag you can use.
  2455.  
  2456.     INPUTS
  2457.     Tag - the information you want.
  2458.      o PPCTASKTAG_STARTUP_MSG
  2459.        returns the PPCTask`s startup msg. This msg will be replied
  2460.        by the PowerUPKernel after the PPC Task ends so you can use
  2461.        this method to check that the PPCTask is gone so a PPCUnLoadObject()
  2462.        is save. On the PPC side you can use it as a method to pass
  2463.        data.
  2464.      o PPCTASKTAG_STARTUP_MSGDATA
  2465.        returns the startup`s MsgData. This data field can be used
  2466.        to pass startup data to the PPC. Like some M68k msgport for
  2467.        example.
  2468.      o PPCTASKTAG_STARTUP_MSGLENGTH
  2469.        returns the startup`s MsgLength.
  2470.      o PPCTASKTAG_STARTUP_MSGID
  2471.        returns the startup`s MsgID.
  2472.      o PPCTASKTAG_MSGPORT
  2473.        returns the PPCPort which belongs to the PPCTask. If you
  2474.        haven`t asked for one in PPCCreateTask() the function returns
  2475.        NULL.
  2476.      o PPCTASKTAG_STACKSIZE
  2477.        returns the size of the task`s stack.
  2478.      o PPCTASKTAG_EXTUSERDATA
  2479.        returns the extended userdata..used by ixemul
  2480.  
  2481.     RESULT
  2482.     result - depends on the requested Tag
  2483.  
  2484.     SEE ALSO
  2485.     powerup/ppclib/tasks.h
  2486.  
  2487. PowerUPKernel/PPCGetTimerObject               PowerUPKernel/PPCGetTimerObject
  2488.  
  2489.    NAME
  2490.     PPCGetTimerObject -- get informations from a TimerObject
  2491.  
  2492.    SYNOPSIS
  2493.     PPCGetTimerObject(TimerObject, Tag , ResultPtr);
  2494.                       gpr3         gpr4  gpr5
  2495.  
  2496.     void    PPCGetTimerObject(void*,ULONG,unsigned long long*); (GCC)
  2497.     void    PPCGetTimerObject(void*,ULONG,ULONG *[2]);          (SAS)
  2498.  
  2499.    FUNCTION
  2500.  
  2501.    INPUT
  2502.        TimerObject -- an object created with PPCCreateTimerObject
  2503.     Tag         -- information attribute
  2504.      o PPCTIMERTAG_TICKSPERSEC
  2505.        returns the number of ticks each second
  2506.      o PPCTIMERTAG_START
  2507.        It returns the saved CPU tick counter which was saved before
  2508.        by a PPCSetTimerObject(,PPCTIMERTAG_START,);
  2509.      o PPCTIMERTAG_STOP
  2510.        It returns the saved CPU tick counter which was saved before
  2511.        by a PPCSetTimerObject(,PPCTIMERTAG_STOP,);
  2512.      o PPCTIMERTAG_CURRENTTICKS
  2513.        returns the current CPU tick count
  2514.      o PPCTIMERTAG_DIFFTICKS
  2515.        returns the difference between the START and STOP of the
  2516.        CPU timerobject in ticks.
  2517.      o PPCTIMERTAG_DIFFMICRO
  2518.        returns the difference between the START and STOP of the
  2519.        CPU timerobject in micros.
  2520.      o PPCTIMERTAG_DIFFSECS
  2521.        returns the difference between the START and STOP of the
  2522.        CPU timerobject in seconds.
  2523.      o PPCTIMERTAG_DIFFMINS
  2524.        returns the difference between the START and STOP of the
  2525.        CPU timerobject in mins.
  2526.      o PPCTIMERTAG_DIFFHOURS
  2527.        returns the difference between the START and STOP of the
  2528.        CPU timerobject in hours.
  2529.      o PPCTIMERTAG_DIFFDAYS
  2530.        returns the difference between the START and STOP of the
  2531.        CPU timerobject in days.
  2532.  
  2533.     ResultPtr   -- Ptr to an unsigned long long or ULONG[2] where
  2534.                    the result is stored.
  2535.  
  2536.    SEE ALSO
  2537.     PPCCreateTimerObject(), PPCDeleteTimerObject(), PPCSetTimerObject()
  2538.  
  2539. PowerUPKernel/PPCInsert                               PowerUPKernel/PPCInsert
  2540.  
  2541.    NAME
  2542.     PPCInsert -- insert a node into a list
  2543.  
  2544.    SYNOPSIS
  2545.     PPCInsert(list, node, listNode)
  2546.               gpr3  gpr4  gpr5
  2547.  
  2548.     void PPCInsert(struct List*, struct Node*, struct Node*);
  2549.  
  2550.    FUNCTION
  2551.     Insert a node into a doubly linked list AFTER a given node
  2552.     position.  Insertion at the head of a list is possible by
  2553.     passing a NULL listNode, though the PPCAddHead() function is
  2554.     slightly faster for that special case.
  2555.  
  2556.    WARNING
  2557.     This function does not arbitrate for access to the list.  The
  2558.     calling task must be the owner of the involved list.
  2559.  
  2560.    INPUTS
  2561.     list - a pointer to the target list header
  2562.     node - the node to insert
  2563.     listNode - the node after which to insert
  2564.  
  2565.    SEE ALSO
  2566.     PPCAddHead(), PPCAddTail(),
  2567.     PPCEnqueue(), PPCRemHead(),
  2568.     PPCRemove(), PPCRemTail()
  2569.  
  2570. PowerUPKernel/PPCInsertSync                       PowerUPKernel/PPCInsertSync
  2571.  
  2572.    NAME
  2573.     PPCInsertSync -- sync insert a node into a list
  2574.  
  2575.    SYNOPSIS
  2576.     PPCInsertSync(list, node, listNode)
  2577.                   gpr3  gpr4  gpr5
  2578.  
  2579.     void PPCInsertSync(struct List *, struct Node *, struct Node *);
  2580.  
  2581.    FUNCTION
  2582.     Insert a node into a doubly linked list AFTER a given node
  2583.     position.  Insertion at the head of a list is possible by
  2584.     passing a NULL listNode, though the PPCAddHead() function
  2585.     is slightly faster for that special case.
  2586.  
  2587.    INPUTS
  2588.     list - a pointer to the target list header
  2589.     node - the node to insert
  2590.     listNode - the node after which to insert
  2591.  
  2592.    SEE ALSO
  2593.     PPCAddHeadSync(), PPCAddTailSync(),
  2594.     PPCEnqueueSync(), PPCRemHeadSync(),
  2595.     PPCRemoveSync(), PPCRemTailSync()
  2596.  
  2597. PowerUPKernel/PPCkprintf                             PowerUPKernel/PPCkprintf
  2598.  
  2599.     NAME
  2600.     PPCkprintf -- formatted print to the serial
  2601.  
  2602.     SYNOPSIS
  2603.     Length = PPCkprintf(FmtString, ...)
  2604.     gpr3                gpr3
  2605.  
  2606.     int PPCkprintf(const char*, ...);
  2607.  
  2608.     FUNCTION
  2609.     does a format output to the serial with stack parameters.
  2610.  
  2611.     INPUTS
  2612.     FmtString - FmtString described in PPCRawDoFmt()
  2613.  
  2614.     RESULT
  2615.     Length - count of char output
  2616.  
  2617.     SEE ALSO
  2618.     PPCvprintf
  2619.  
  2620. PowerUPKernel/PPCLoadObject                       PowerUPKernel/PPCLoadObject
  2621.  
  2622.     NAME
  2623.     PPCLoadObject -- Load ELF PPC File (V46)
  2624.  
  2625.     SYNOPSIS
  2626.     ElfObject = PPCLoadObject(Name)
  2627.     gpr3                      gpr3
  2628.  
  2629.     void *PPCLoadObject(char*);
  2630.  
  2631.     FUNCTION
  2632.     Loads an ELF PPC binary which is created by gcc for
  2633.     example. It can only handle relocatable ELF binaries
  2634.     (ld -r option)
  2635.  
  2636.     INPUTS
  2637.     name     - filename
  2638.  
  2639.     RESULT
  2640.     object    - ELF Program object which can be started by
  2641.               PPCCreateTask()
  2642.  
  2643.     NOTE
  2644.     ELF will be the only format allowed the PowerUP. We don't
  2645.     want alien formats.
  2646.  
  2647.     SEE ALSO
  2648.     PPCUnLoadObject(), PPCCreateTask()
  2649.  
  2650. PowerUPKernel/PPCLoadObjectTagList         PowerUPKernel/PPCLoadObjectTagList
  2651.  
  2652.     NAME
  2653.     PPCLoadObjectTagList -- Create a PPC Object from an ELF Stream (V46)
  2654.     PPCLoadObjectTags -- Varargs Stub for PPCLoadObjectTagList
  2655.  
  2656.     SYNOPSIS
  2657.     ElfObject = PPCLoadObjectTagList(Tags )
  2658.     gpr3                             gpr3
  2659.  
  2660.     void *PPCLoadObjectTagList(struct TagItem*);
  2661.     void *PPCLoadObjectTags(...);
  2662.  
  2663.     FUNCTION
  2664.     Creates an PPC Object from an  ELF PPC binary which is created by gcc
  2665.        for example. It can only handle relocatable ELF binaries
  2666.     (ld -r option). This call is similar to PPCLoadObject() but allows to
  2667.        create objects from ELF files that are already resident in memory.
  2668.  
  2669.     INPUTS
  2670.     tags     - The Tags you want.
  2671.       o PPCELFLOADTAG_ELFNAME
  2672.         pointer to a filename of the elf file or the name of the stram.
  2673.       o PPCELFLOADTAG_ELFADDRESS
  2674.         pointer to the elf stream resident in memory.
  2675.         PPCELFLOBJTAG_ELFNAME is the object name then.
  2676.       o PPCELFLOADTAG_ELFLENGTH
  2677.         length of the elf stream. This tag is optional
  2678.       o PPCELFLOADTAG_HOOK
  2679.         Stream IO hook which can be used to replace the open,read,seek
  2680.         stream functions.
  2681.         APTR CallHookPkt(hook,StreamHandle,ElfStreamMsg);
  2682.         The result of this function must be Type depended.
  2683.         Please read powerup/ppclib/object.h for more informations.
  2684.  
  2685.     RESULT
  2686.     object    - ELF Program object which can be started by
  2687.               PPCCreateTask()
  2688.  
  2689.     NOTES
  2690.     ELF will be the only format allowed the PowerUP. We don't
  2691.     want alien formats.
  2692.     PPCLOBJTAG_ELFNAME and PPCLOBJTAG_ELFADDRESS are mutually exclusive.
  2693.  
  2694.     SEE ALSO
  2695.     PPCUnLoadObject(), PPCLoadObject(), PPCCreateTask()
  2696.  
  2697. PowerUPKernel/PPCLsl64                                 PowerUPKernel/PPCLsl64
  2698.  
  2699.     NAME
  2700.     PPCLsl64 -- Logical Shift left an unsigned 64 bit integer (V46)
  2701.  
  2702.     SYNOPSIS
  2703.     Value    =    PPCLsl64(ValueA ,  ShiftOffset)
  2704.     gpr3:gpr4                 gpr3:gpr4  gpr5
  2705.  
  2706.     long long PPCLsl64(long long, int);
  2707.  
  2708.     FUNCTION
  2709.     Logical shift left a long long value and return a long long result.
  2710.  
  2711.     INPUTS
  2712.     ValueA      - long long value A
  2713.     ShiftOffset - integer value(0..63)
  2714.  
  2715.     RESULT
  2716.     Value - long long result
  2717.  
  2718.     NOTES
  2719.     SAS PPC unfortunately has no 64bit integer support, so you
  2720.     should look for the PTR functions.
  2721.  
  2722.     SEE ALSO
  2723.     PPCLsl64p()
  2724.  
  2725. PowerUPKernel/PPCLsl64p                               PowerUPKernel/PPCLsl64p
  2726.  
  2727.     NAME
  2728.     PPCLsl64p -- Logical Shift left an unsigned 64 bit integer (V46)
  2729.  
  2730.     SYNOPSIS
  2731.     PPCLsl64p(ValuePtrA, Shiftoffset)
  2732.               gpr3       gpr4
  2733.  
  2734.     void    PPCLsl64p(long*,int);
  2735.  
  2736.     FUNCTION
  2737.     Logical shift left a long long value and return at return
  2738.     at ValuePtrA
  2739.  
  2740.     INPUTS
  2741.     ValuePtrA   - ptr to a long long value A
  2742.     ShiftOffset - integer value(0..63)
  2743.  
  2744.     RESULT
  2745.     ValuePtrA - long long result is written to the ValuePtrA address.
  2746.  
  2747.     SEE ALSO
  2748.     PPCLsl64()
  2749.  
  2750. PowerUPKernel/PPCLsr64                                 PowerUPKernel/PPCLsr64
  2751.  
  2752.     NAME
  2753.     PPCLsr64 -- Logical Shift right an unsigned 64 bit integer (V46)
  2754.  
  2755.     SYNOPSIS
  2756.     Value    =    PPCLsr64(ValueA ,  ShiftOffset)
  2757.     gpr3:gpr4                 gpr3:gpr4  gpr5
  2758.  
  2759.     long long PPCLsr64(long long, int);
  2760.  
  2761.     FUNCTION
  2762.     Logical shift right a long long value and return a long long result.
  2763.  
  2764.     INPUTS
  2765.     ValueA      - long long value A
  2766.     ShiftOffset - integer value(0..63)
  2767.  
  2768.     RESULT
  2769.     Value - long long result
  2770.  
  2771.     NOTES
  2772.     SAS PPC unfortunately has no 64bit integer support, so you
  2773.     should look for the PTR functions.
  2774.  
  2775.     SEE ALSO
  2776.     PPCLsr64p()
  2777.  
  2778. PowerUPKernel/PPCLsr64p                               PowerUPKernel/PPCLsr64p
  2779.  
  2780.     NAME
  2781.     PPCLsr64p -- Logical Shift right an unsigned 64 bit integer (V46)
  2782.  
  2783.     SYNOPSIS
  2784.     PPCLsr64p(ValuePtrA, Shiftoffset)
  2785.               gpr3       gpr4
  2786.  
  2787.     void    PPCLsr64p(long*,int);
  2788.  
  2789.     FUNCTION
  2790.     Logical shift right a long long value and return at return
  2791.     at ValuePtrA
  2792.  
  2793.     INPUTS
  2794.     ValuePtrA   - ptr to a long long value A
  2795.     ShiftOffset - integer value(0..63)
  2796.  
  2797.     RESULT
  2798.     ValuePtrA - long long result is written to the ValuePtrA address.
  2799.  
  2800.     SEE ALSO
  2801.     PPCLsr64()
  2802.  
  2803. PowerUPKernel/PPCMods64                               PowerUPKernel/PPCMods64
  2804.  
  2805.     NAME
  2806.     PPCMods64 -- Modulus 2 signed 64bit integers
  2807.  
  2808.     SYNOPSIS
  2809.     Result = PPCMods64(highA,lowA,highB,lowB )
  2810.     gpr3:gpr4         gpr3  gpr4 gpr5  gpr6
  2811.  
  2812.     long    PPCMods64(ULONG,ULONG,ULONG,ULONG);
  2813.  
  2814.     FUNCTION
  2815.     Multiplies 2 signed 64bit integers and
  2816.     returns the 64bit result in A.
  2817.  
  2818.     INPUTS
  2819.     highA         - upper 32bit of value A
  2820.     lowA         - lower 32bit of value A
  2821.     highB         - upper 32bit of value B
  2822.     lowB         - lower 32bit of value B
  2823.  
  2824.     RESULT
  2825.     Result    - 64Bit result devided into 2 registers
  2826.  
  2827.     SEE ALSO
  2828.     PPCMods64p()
  2829.  
  2830. PowerUPKernel/PPCMods64p                             PowerUPKernel/PPCMods64p
  2831.  
  2832.     NAME
  2833.     PPCMods64p -- Modulus 2 signed 64bit integers
  2834.  
  2835.     SYNOPSIS
  2836.     PPCMods64p(ValueAPtr,ValueBPtr)
  2837.                gpr3      gpr4
  2838.  
  2839.     void    PPCMods64p(long long*,long long*);
  2840.  
  2841.     FUNCTION
  2842.     Multiplies 2 signed 64bit integers and
  2843.     returns the 64bit result in A.
  2844.  
  2845.     INPUTS
  2846.     ValueAPtr    - Ptr to 64Bit value A
  2847.     ValueBPtr    - Ptr to 64Bit value B
  2848.  
  2849.     SEE ALSO
  2850.     PPCMods64()
  2851.  
  2852. PowerUPKernel/PPCModu64                               PowerUPKernel/PPCModu64
  2853.  
  2854.     NAME
  2855.     PPCModu64 -- Modulus 2 unsigned 64bit integers
  2856.  
  2857.     SYNOPSIS
  2858.     Result = PPCModu64(highA,lowA,highB,lowB )
  2859.     gpr3:gpr4         gpr3  gpr4 gpr5  gpr6
  2860.  
  2861.     long    PPCModu64(ULONG,ULONG,ULONG,ULONG);
  2862.  
  2863.     FUNCTION
  2864.     Multiplies 2 unsigned 64bit integers and
  2865.     returns the 64bit result in A.
  2866.  
  2867.     INPUTS
  2868.     highA         - upper 32bit of value A
  2869.     lowA         - lower 32bit of value A
  2870.     highB         - upper 32bit of value B
  2871.     lowB         - lower 32bit of value B
  2872.  
  2873.     RESULT
  2874.     Result    - 64Bit result devided into 2 registers
  2875.  
  2876.     SEE ALSO
  2877.     PPCModu64p()
  2878.  
  2879. PowerUPKernel/PPCModu64p                             PowerUPKernel/PPCModu64p
  2880.  
  2881.     NAME
  2882.     PPCModu64p -- Modulus 2 unsigned 64bit integers
  2883.  
  2884.     SYNOPSIS
  2885.     PPCModu64p(ValueAPtr,ValueBPtr)
  2886.                gpr3      gpr4
  2887.  
  2888.     void    PPCModu64p(long long*,long long*);
  2889.  
  2890.     FUNCTION
  2891.     Multiplies 2 unsigned 64bit integers and
  2892.     returns the 64bit result in A.
  2893.  
  2894.     INPUTS
  2895.     ValueAPtr    - Ptr to 64Bit value A
  2896.     ValueBPtr    - Ptr to 64Bit value B
  2897.  
  2898.     SEE ALSO
  2899.     PPCModu64()
  2900.  
  2901. PowerUPKernel/PPCMuls64                               PowerUPKernel/PPCMuls64
  2902.  
  2903.     NAME
  2904.     PPCMuls64 -- Multiply 2 signed 64bit integers
  2905.  
  2906.     SYNOPSIS
  2907.     Result = PPCMuls64(highA,lowA,highB,lowB )
  2908.     gpr3:gpr4         gpr3  gpr4 gpr5  gpr6
  2909.  
  2910.     long    PPCMuls64(ULONG,ULONG,ULONG,ULONG);
  2911.  
  2912.     FUNCTION
  2913.     Multiplies 2 signed 64bit integers and
  2914.     returns the 64bit result in A.
  2915.  
  2916.     INPUTS
  2917.     highA         - upper 32bit of value A
  2918.     lowA         - lower 32bit of value A
  2919.     highB         - upper 32bit of value B
  2920.     lowB         - lower 32bit of value B
  2921.  
  2922.     RESULT
  2923.     Result    - 64Bit result devided into 2 registers
  2924.  
  2925.     SEE ALSO
  2926.     PPCMuls64p()
  2927.  
  2928. PowerUPKernel/PPCMuls64p                             PowerUPKernel/PPCMuls64p
  2929.  
  2930.     NAME
  2931.     PPCMuls64p -- Multiply 2 signed 64bit integers
  2932.  
  2933.     SYNOPSIS
  2934.     PPCMuls64p(ValueAPtr,ValueBPtr)
  2935.                gpr3      gpr4
  2936.  
  2937.     void    PPCMuls64p(long long*,long long*);
  2938.  
  2939.     FUNCTION
  2940.     Multiplies 2 signed 64bit integers and
  2941.     returns the 64bit result in A.
  2942.  
  2943.     INPUTS
  2944.     ValueAPtr    - Ptr to 64Bit value A
  2945.     ValueBPtr    - Ptr to 64Bit value B
  2946.  
  2947.     SEE ALSO
  2948.     PPCMuls64()
  2949.  
  2950. PowerUPKernel/PPCMulu64                               PowerUPKernel/PPCMulu64
  2951.  
  2952.     NAME
  2953.     PPCMulu64 -- Multiply 2 unsigned 64bit integers
  2954.  
  2955.     SYNOPSIS
  2956.     Result = PPCMulu64(highA,lowA,highB,lowB )
  2957.     gpr3:gpr4         gpr3  gpr4 gpr5  gpr6
  2958.  
  2959.     long    PPCMulu64(ULONG,ULONG,ULONG,ULONG);
  2960.  
  2961.     FUNCTION
  2962.     Multiplies 2 unsigned 64bit integers and
  2963.     returns the 64bit result in A.
  2964.  
  2965.     INPUTS
  2966.     highA         - upper 32bit of value A
  2967.     lowA         - lower 32bit of value A
  2968.     highB         - upper 32bit of value B
  2969.     lowB         - lower 32bit of value B
  2970.  
  2971.     RESULT
  2972.     Result    - 64Bit result devided into 2 registers
  2973.  
  2974.     SEE ALSO
  2975.     PPCMulu64p()
  2976.  
  2977. PowerUPKernel/PPCMulu64p                             PowerUPKernel/PPCMulu64p
  2978.  
  2979.     NAME
  2980.     PPCMulu64p -- Multiply 2 unsigned 64bit integers
  2981.  
  2982.     SYNOPSIS
  2983.     PPCMulu64p(ValueAPtr,ValueBPtr)
  2984.                gpr3      gpr4
  2985.  
  2986.     void    PPCMulu64p(long long*,long long*);
  2987.  
  2988.     FUNCTION
  2989.     Multiplies 2 unsigned 64bit integers and
  2990.     returns the 64bit result in A.
  2991.  
  2992.     INPUTS
  2993.     ValueAPtr    - Ptr to 64Bit value A
  2994.     ValueBPtr    - Ptr to 64Bit value B
  2995.  
  2996.     SEE ALSO
  2997.     PPCMulu64()
  2998.  
  2999. PowerUPKernel/PPCNeg64                                 PowerUPKernel/PPCNeg64
  3000.  
  3001.     NAME
  3002.     PPCNeg64 -- Negate a 64bit integer
  3003.  
  3004.     SYNOPSIS
  3005.     Result = PPCNeg64(highA,lowA)
  3006.     gpr3:gpr4         gpr3  gpr4
  3007.  
  3008.     long    PPCNeg64(ULONG,ULONG);
  3009.  
  3010.     FUNCTION
  3011.     Negates a 64bit integers and returns the 64bit result in 2
  3012.     32bit registers.
  3013.  
  3014.     INPUTS
  3015.     highA         - upper 32bit of value A
  3016.     lowA         - lower 32bit of value A
  3017.  
  3018.     RESULT
  3019.     Result    - 64Bit result devided into 2 registers
  3020.  
  3021.     SEE ALSO
  3022.     PPCNeg64p()
  3023.  
  3024. PowerUPKernel/PPCNeg64p                               PowerUPKernel/PPCNeg64p
  3025.  
  3026.     NAME
  3027.     PPCNeg64p -- Negate a 64bit integer
  3028.  
  3029.     SYNOPSIS
  3030.     PPCNeg64p(ValueAPtr)
  3031.               gpr3
  3032.  
  3033.     void    PPCNeg64p(long long*);
  3034.  
  3035.     FUNCTION
  3036.     Negates a 64bit integer and returns the 64bit result in
  3037.     A.
  3038.  
  3039.     INPUTS
  3040.     ValueAPtr    - Ptr to 64Bit value A
  3041.  
  3042.     SEE ALSO
  3043.     PPCNeg64()
  3044.  
  3045. PowerUPKernel/PPCNewList                             PowerUPKernel/PPCNewList
  3046.  
  3047.    NAME
  3048.     PPCNewList - Initialize a list (minlist) header...
  3049.  
  3050.    SYNOPSIS
  3051.     PPCNewList(list)
  3052.                gpr3
  3053.  
  3054.     VOID PPCNewList(struct List *);
  3055.     VOID PPCNewList(struct MinList *);
  3056.  
  3057.    FUNCTION
  3058.     Initializes a List so it can be used by list operations.
  3059.  
  3060.    INPUTS
  3061.     list - pointer to a List or MinList.
  3062.  
  3063.    SEE ALSO
  3064.     <exec/lists.h>
  3065.  
  3066. PowerUPKernel/PPCNextTagItem                     PowerUPKernel/PPCNextTagItem
  3067.  
  3068.     NAME
  3069.     PPCNextTagItem -- Iterate TagItem lists.
  3070.  
  3071.     SYNOPSIS
  3072.     next_tag = PPCNextTagItem(tagItemPtr )
  3073.     D0              gpr3
  3074.  
  3075.     struct TagItem *PPCNextTagItem(struct TagItem **tagItemPtr);
  3076.  
  3077.     FUNCTION
  3078.     Iterates through a (chained) array of TagItem structures,
  3079.     skipping and chaining as dictated by system tags.  TAG_SKIP
  3080.     will cause it to skip the entry and the next, TAG_IGNORE ignores
  3081.     that single entry, and TAG_MORE has a pointer to another array
  3082.     of tags (and terminates the current array!)  TAG_DONE also
  3083.     terminates the current array.  Each call returns either the next
  3084.     tagitem you should examine, or NULL at the end.
  3085.  
  3086.     INPUTS
  3087.     tagItemPtr     - doubly-indirect reference to a TagItem structure.
  3088.               The pointer will be changed to keep track of the
  3089.               iteration.
  3090.  
  3091.     RESULT
  3092.     next_tag    - Each TagItem in the array or chain of arrays that
  3093.               should be processed according to system Tag values
  3094.               (in utility/tagitem.h) is returned in turn with
  3095.               successive calls.
  3096.  
  3097.     EXAMPLE
  3098.     Iterate( struct TagItem *tags );
  3099.     {
  3100.         struct TagItem *tstate;
  3101.         struct TagItem *tag;
  3102.  
  3103.         tstate = tags;
  3104.         while ( tag = NextTagItem( &tstate ) )
  3105.         {
  3106.             switch ( tag->ti_Tag )
  3107.             {
  3108.              case TAG1:
  3109.                 ...
  3110.                 break;
  3111.              case TAG2:
  3112.                 ...
  3113.                 break;
  3114.             ...
  3115.             }
  3116.         }
  3117.        }
  3118.  
  3119.     NOTES
  3120.     Do NOT use the value of *tagItemPtr, but rather use the pointer
  3121.     returned by PPCNextTagItem().
  3122.  
  3123.  
  3124.     SEE ALSO
  3125.     utility/tagitem.h, PPCGetTagData(), PPCFindTagItem()
  3126.  
  3127. PowerUPKernel/PPCObtainPort                       PowerUPKernel/PPCObtainPort
  3128.  
  3129.     NAME
  3130.     PPCObtainPort -- Obtain a PPC Message Port
  3131.  
  3132.     SYNOPSIS
  3133.     Port = PPCObtainPort(Tags)
  3134.     gpr3                 gpr3
  3135.  
  3136.     void* PPCObtainPort(struct TagItem*);
  3137.  
  3138.     FUNCTION
  3139.     searches a public PPC MsgPort on the local processor or
  3140.     all processor. A search on the network may also be possible
  3141.     in the future.
  3142.  
  3143.     INPUTS
  3144.     Tags - Tags to specify a public port for example.
  3145.       o PPCPORTTAG_NAME,"Name"
  3146.         defines the name of the PPC port you want to obtain
  3147.  
  3148.       o PPCPORTTAG_ERROR,(ULONG*) ErrorPtr
  3149.         defines the ptr for a more precise return error result
  3150.  
  3151.     RESULT
  3152.     PPCPort    - PPCPort object generated by PPCCreatePort
  3153.  
  3154.     SEE ALSO
  3155.     PPCReleasePort(), powerup/ppclib/message.h
  3156.  
  3157. PowerUPKernel/PPCObtainSemaphore             PowerUPKernel/PPCObtainSemaphore
  3158.  
  3159.    NAME
  3160.     PPCObtainSemaphore -- gain exclusive access to a semaphore
  3161.  
  3162.    SYNOPSIS
  3163.     PPCObtainSemaphore(Semaphore)
  3164.                gpr3
  3165.  
  3166.     void ObtainSemaphore(void*);
  3167.  
  3168.    FUNCTION
  3169.     Semaphores are used to gain exclusive access to an object.
  3170.     PPCObtainSemaphore is the call used to gain this access.  If another
  3171.     user currently has the semaphore locked the call will block until
  3172.     the object is available.
  3173.  
  3174.     If the current PPC task already has locked the semaphore and attempts to
  3175.     lock it again the call will still succeed.  A "nesting count" is
  3176.     incremented each time the current owning task of the semaphore calls
  3177.     PPCObtainSemaphore().  This counter is decremented each time
  3178.     PPCReleaseSemaphore() is called.  When the counter returns to zero the
  3179.     semaphore is actually released, and the next waiting task is called.
  3180.  
  3181.     A queue of waiting tasks is maintained on the stacks of the waiting
  3182.     tasks.    Each will be called in turn as soon as the current task
  3183.     releases the semaphore.
  3184.  
  3185.    INPUT
  3186.        Semaphore -- a semaphore object returned by PPCCreateSemaphore()
  3187.  
  3188.    SEE ALSO
  3189.     PPCObtainSemaphoreShared(), PPCObtainSemaphoreByName(),
  3190.     PPCReleaseSemaphore(), PPCAttemptSemaphore(),
  3191.     PPCAttemptSemaphoreByName()
  3192.  
  3193. PowerUPKernel/PPCObtainSemaphoreByName PowerUPKernel/PPCObtainSemaphoreByName
  3194.  
  3195.    NAME
  3196.     PPCObtainSemaphoreByName -- obtain a public Semaphore
  3197.  
  3198.    SYNOPSIS
  3199.     PPCObtainSemaphoreByName(Name)
  3200.                          gpr3
  3201.  
  3202.     void* PPCObtainSemaphoreByName(char *)
  3203.  
  3204.    FUNCTION
  3205.     Tries to find a Semaphore and obtains it.
  3206.     No Arbitration needed.
  3207.  
  3208.    INPUTS
  3209.     Name - Ptr to the name cstring
  3210.  
  3211.    RESULTS
  3212.     Semaphore - If NULL no Semaphore with that name was found
  3213.  
  3214.    SEE ALSO
  3215.     PPCAttemptSemaphoreByName()
  3216.  
  3217. PowerUPKernel/PPCObtainSemaphoreShared PowerUPKernel/PPCObtainSemaphoreShared
  3218.  
  3219.     NAME
  3220.     PPCObtainSemaphoreShared -- gain shared access to a semaphore
  3221.  
  3222.     SYNOPSIS
  3223.     PPCObtainSemaphoreShared(Semaphore)
  3224.                           gpr3
  3225.  
  3226.     void PPCObtainSemaphoreShared(void*);
  3227.  
  3228.     FUNCTION
  3229.     A lock on a semaphore may either be exclusive, or shared.
  3230.     Exclusive locks are granted by the ObtainSemaphore() and
  3231.     PPCAttemptSemaphore() functions.  Shared locks are granted by
  3232.     PPCObtainSemaphoreShared().  Calls may be nested.
  3233.  
  3234.     Any number of tasks may simultaneously hold a shared lock on a
  3235.     semaphore.  Only one task may hold an exclusive lock.  A typical
  3236.     application is a list that is often read, but only occasionally
  3237.     written to.
  3238.  
  3239.     Any exlusive locker will be held off until all shared lockers
  3240.     release the semaphore.  Likewise, if an exlusive lock is held,
  3241.     all potential shared lockers will block until the exclusive lock
  3242.     is released.  All shared lockers are restarted at the same time.
  3243.  
  3244.     EXAMPLE
  3245.         ObtainSemaphoreShared(ss);
  3246.         // read data
  3247.         ReleaseSemaohore(ss);
  3248.  
  3249.         ObtainSemaphore(ss);
  3250.         // modify data
  3251.         ReleaseSemaohore(ss);
  3252.  
  3253.     INPUT
  3254.        Semaphore -- a semaphore object returned by PPCCreateSemaphore()
  3255.  
  3256.     SEE ALSO
  3257.     PPCObtainSemaphore(), PPCObtainSemaphoreByName(),
  3258.     PPCReleaseSemaphore(), PPCAttemptSemaphore(),
  3259.     PPCAttemptSemaphoreByName()
  3260.  
  3261. PowerUPKernel/PPCOpen                                   PowerUPKernel/PPCOpen
  3262.  
  3263.     NAME
  3264.     PPCOpen -- Open a file for input or output
  3265.  
  3266.     SYNOPSIS
  3267.     file = PPCOpen( name, accessMode )
  3268.     gpr3            gpr3    gpr4
  3269.  
  3270.     BPTR PPCOpen(STRPTR, LONG)
  3271.  
  3272.     FUNCTION
  3273.     This function is equal to the dos.library/Open function.
  3274.     It works in the context of the Msg Task each PPC Task has
  3275.     on the AmigaOS side.
  3276.  
  3277.     INPUTS
  3278.     name       - pointer to a null-terminated string
  3279.     accessMode - integer
  3280.  
  3281.     RESULTS
  3282.     file - BCPL pointer to a file handle
  3283.  
  3284.     SEE ALSO
  3285.     PPCClose(), PPCRead(), PPCWrite(), PPCSeek()
  3286.  
  3287. PowerUPKernel/PPCOpenLibrary                     PowerUPKernel/PPCOpenLibrary
  3288.  
  3289.    NAME
  3290.     PPCOpenLibrary -- Opens a shared object module (V46)
  3291.  
  3292.    SYNOPSIS
  3293.     LibObject = PPCOpenLibrary( Name, Tags)
  3294.  
  3295.     void*    PPCOpenLibrary( char*, struct TagItem*);
  3296.     gpr3                    gpr3   gpr4
  3297.  
  3298.    FUNCTION
  3299.     Loads a shared elf object. If the function 
  3300.     __LIB_Init(LibObject) exists, it is executed and
  3301.     must return the LibObject if the init shouldn`t fail.
  3302.  
  3303.    INPUTS
  3304.     name - pointer to the name of the library
  3305.     tags - pointer to a tag array
  3306.      o PPCELFLOADTAG_LIBVERSION, ULONG
  3307.        ask for at least this version of the library
  3308.      o PPCELFLOADTAG_LIBREVISION, ULONG
  3309.        ask for at least this revision of the library, if
  3310.        the found library`s version is equal to the requested
  3311.        version.
  3312.      o PPCELFLOADTAG_LIBEXACTVERSION
  3313.        ask for a specific version of the library
  3314.      o PPCELFLOADTAG_LIBEXACTVERSION
  3315.        ask for a specific revision of the library
  3316.  
  3317.    RESULT
  3318.     LibObject - library object or NULL for fail
  3319.  
  3320.    NOTES
  3321.     Simular to the NetBSD dlopen(), dlclose(), dlsym() interface.
  3322.     If there`s a working ld a dynamic symbol link shouldn`t be
  3323.     the problem anymore but at the moment LD isn`t useful.
  3324.  
  3325.    SEE ALSO
  3326.     PPCCloseLibrary(), PPCGetLibSymbol(),
  3327.     powerup/ppclib/object.h
  3328.  
  3329. PowerUPKernel/PPCOr64                                   PowerUPKernel/PPCOr64
  3330.  
  3331.     NAME
  3332.     PPCOr64 -- Or 2 64 bit integer values (V46)
  3333.  
  3334.     SYNOPSIS
  3335.     Value    =    PPCOr64(ValueA ,  ValueB)
  3336.     gpr3:gpr4               gpr3:gpr4  gpr5:gpr6
  3337.  
  3338.     long long PPCOr64(long long, long long);
  3339.  
  3340.     FUNCTION
  3341.     Ors 2 long long values and returns a long long result.
  3342.  
  3343.     INPUTS
  3344.     ValueA - long long value A
  3345.     ValueB - long long value B
  3346.  
  3347.     RESULT
  3348.     Value - long long result
  3349.  
  3350.     NOTES
  3351.     SAS PPC unfortunately has no 64bit integer support, so you
  3352.     should look for the PTR functions.
  3353.  
  3354.     SEE ALSO
  3355.     PPCOr64p()
  3356.  
  3357. PowerUPKernel/PPCOr64p                                 PowerUPKernel/PPCOr64p
  3358.  
  3359.     NAME
  3360.     PPCOr64p -- Or 2 64 bit integer values (V46)
  3361.  
  3362.     SYNOPSIS
  3363.     PPCOr64p(ValuePtrA, ValuePtrB)
  3364.               gpr3       gpr4
  3365.  
  3366.     void    PPCOr64p(long*,long*);
  3367.  
  3368.     FUNCTION
  3369.     Ors 2 long long values and returns the result at ValuePtrA
  3370.  
  3371.     INPUTS
  3372.     ValuePtrA - ptr to a long long value A
  3373.     ValuePtrB - ptr to a long long value B
  3374.  
  3375.     RESULT
  3376.     ValuePtrA - long long result is written to the ValuePtrA address.
  3377.  
  3378.     SEE ALSO
  3379.     PPCOr64()
  3380.  
  3381. PowerUPKernel/PPCprintf                               PowerUPKernel/PPCprintf
  3382.  
  3383.     NAME
  3384.     PPCprintf -- formatted print to stdout
  3385.  
  3386.     SYNOPSIS
  3387.     Length = PPCprintf(FmtString, ...)
  3388.     gpr3               gpr3
  3389.  
  3390.     int PPCprintf(const char*, ...);
  3391.  
  3392.     FUNCTION
  3393.     does a format output to the stdout file with stack parameters.
  3394.  
  3395.     INPUTS
  3396.     FmtString - FmtString described in PPCRawDoFmt()
  3397.  
  3398.     RESULT
  3399.     Length - count of char output
  3400.  
  3401.     SEE ALSO
  3402.     PPCvprintf
  3403.  
  3404. PowerUPKernel/PPCRawDoFmt                           PowerUPKernel/PPCRawDoFmt
  3405.  
  3406.    NAME
  3407.     RawDoFmt -- format data into a character stream.
  3408.  
  3409.    SYNOPSIS
  3410.     NextData = PPCRawDoFmt(FormatString, DataStream, PutChProc, PutChData);
  3411.        gpr3                   gpr3          gpr4        gpr4       gpr5
  3412.  
  3413.     APTR PPCRawDoFmt(STRPTR,APTR,void (*)(),APTR);
  3414.  
  3415.    FUNCTION
  3416.     perform "C"-language-like formatting of a data stream, outputting
  3417.     the result a character at a time.  Where % formatting commands are
  3418.     found in the FormatString, they will be replaced with the
  3419.     corresponding element in the DataStream.  %% must be used in the
  3420.     string if a % is desired in the output.
  3421.  
  3422.     Under V36, RawDoFmt() returns a pointer to the end of the DataStream
  3423.     (The next argument that would have been processed).  This allows
  3424.     multiple formatting passes to be made using the same data.
  3425.  
  3426.    INPUTS
  3427.     FormatString - a "C"-language-like NULL terminated format string,
  3428.     with the following supported % options:
  3429.  
  3430.      %[flags][width.Precision][length]type
  3431.  
  3432.     flags  - supported flags are
  3433.              '-' - specifies left justification within the specified
  3434.                    or default field width.
  3435.              '+' - causes a plus or minus sign to be placed before the
  3436.                    result. If it`s not specified only the sign is
  3437.                    only generated for a negative value.
  3438.              ' ' - causes a leading blank for a positive number and
  3439.                    a minus for a negative number. the (plus) sign
  3440.                    overrides this flag.
  3441.              '#' - causes a type depending format. With x and X types
  3442.                    it generates a 0x or 0X prefix.
  3443.                    With the f, e, and E type conversion it forces a
  3444.                    '.' in the output.
  3445.                    With the g and G types it forces a '.' and trailing
  3446.                    zeroes.
  3447.              '0' - pads the field width with leading zeroes instead of
  3448.                    spaces.
  3449.  
  3450.     width  - field width.  If the first character is a '0', the
  3451.          field will be padded with leading 0's.
  3452.       .    - must follow the field width, if specified
  3453.     limit  - maximum number of characters to output from a string.
  3454.          (only valid for %s).
  3455.     length - size of input data defaults to WORD for types d, x,
  3456.          and c, 'l' changes this to long (32-bit) and
  3457.              'L' for long long (64-bit)
  3458.     type   - supported types are:
  3459.             b - BSTR, data is 32-bit BPTR to byte count followed
  3460.                 by a byte string, or NULL terminated byte string.
  3461.                 A NULL BPTR is treated as an empty string.
  3462.             d - decimal
  3463.             u - unsigned decimal (Added in V37 exec)
  3464.             x - hexadecimal
  3465.             s - string, a 32-bit pointer to a NULL terminated
  3466.                 byte string.  In V36, a NULL pointer is treated
  3467.                 as an empty string
  3468.             c - character
  3469.                 e,E,f - the precision is the number of digits to appear
  3470.                         after the decimal generated, trailing zeroes are
  3471.                         supplied
  3472.                   g,G - the precision is the maxium number of significant
  3473.                         digits
  3474.  
  3475.     DataStream - a stream of data that is interpreted according to
  3476.          the format string.  Often this is a pointer into
  3477.          the task's stack.
  3478.     PutChProc  - the procedure to call with each character to be
  3479.          output, called as:
  3480.  
  3481.     PutChData = PutChProc(Char,  PutChData);
  3482.     gpr3                  gpr3   gpr4
  3483.  
  3484.         the procedure is called with a NULL Char at the end of
  3485.         the format string.
  3486.  
  3487.         IMPORTANT! IMPORTANT! IMPORTANT! IMPORTANT! IMPORTANT!
  3488.  
  3489.         If PutChProc is == 0 it writes the character into the Buffer.
  3490.         The buffer is the address PutChData points too.
  3491.         If PutChProc is == 1 it writes the character to the serial line.
  3492.  
  3493.  
  3494.     PutChData - a value that is passed through to the PutChProc
  3495.         procedure.  This is untouched by RawDoFmt, and may be
  3496.         modified by the PutChProc.
  3497.  
  3498.    WARNING
  3499.     This Amiga ROM function formats word values in the data stream.  If
  3500.     your compiler defaults to longs, you must add an "l" to your
  3501.     % specifications.  This can get strange for characters, which might
  3502.     look like "%lc".
  3503.  
  3504.    SEE ALSO
  3505.     Documentation on the C language "printf" call in any C language
  3506.     reference book.
  3507.  
  3508. PowerUPKernel/PPCRead                                   PowerUPKernel/PPCRead
  3509.  
  3510.     NAME
  3511.     PPCRead -- Read bytes of data from a file
  3512.  
  3513.     SYNOPSIS
  3514.     actualLength = PPCRead( file, buffer, length )
  3515.     gpr3                    gpr3  gpr4    gpr5
  3516.  
  3517.     LONG PPCRead(BPTR, void *, LONG)
  3518.  
  3519.     FUNCTION
  3520.     This function is equal to the dos.library/Read function.
  3521.     It works in the context of the Msg Task each PPC Task has
  3522.     on the AmigaOS side.
  3523.  
  3524.     ATTENTION
  3525.     You must use PPCAllocMem() for the buffer, so it`s aligned
  3526.     to the PPC cache lines.
  3527.  
  3528.     INPUTS
  3529.     file - BCPL pointer to a file handle
  3530.     buffer - pointer to buffer
  3531.     length - integer
  3532.  
  3533.     RESULTS
  3534.     actualLength - integer
  3535.  
  3536.     SEE ALSO
  3537.     PPCOpen(), PPCClose(), PPCWrite(), PPCSeek()
  3538.  
  3539. PowerUPKernel/PPCReadByte                           PowerUPKernel/PPCReadByte
  3540.  
  3541.    NAME
  3542.     PPCReadByte -- Read a Long from the 68k side
  3543.  
  3544.    SYNOPSIS
  3545.     Result=PPCReadByte(Address)
  3546.     d0                 a0
  3547.  
  3548.     ULONG    PPCReadByte(UBYTE*);
  3549.  
  3550.    FUNCTION
  3551.     This function reads a long by the 68k processor.
  3552.     Quick way to read small amounts of data without cache effects
  3553.  
  3554.    RESULT
  3555.     Result - UBYTE read from the address
  3556.  
  3557.    SEE ALSO
  3558.     PPCWriteByte()
  3559.  
  3560. PowerUPKernel/PPCReadLong                           PowerUPKernel/PPCReadLong
  3561.  
  3562.    NAME
  3563.     PPCReadLong -- Read a Long from the 68k side
  3564.  
  3565.    SYNOPSIS
  3566.     Result=PPCReadLong(Address)
  3567.        d0                 a0
  3568.  
  3569.     ULONG    PPCReadLong(ULONG*);
  3570.  
  3571.    FUNCTION
  3572.     This function reads a long by the 68k processor.
  3573.     Quick way to read small amounts of data without cache effects
  3574.  
  3575.    RESULT
  3576.     Result - ULONG read from the address
  3577.  
  3578.    SEE ALSO
  3579.     PPCWriteLong()
  3580.  
  3581. PowerUPKernel/PPCReadWord                           PowerUPKernel/PPCReadWord
  3582.  
  3583.    NAME
  3584.     PPCReadWord -- Read a Long from the 68k side
  3585.  
  3586.    SYNOPSIS
  3587.     Result=PPCReadWord(Address)
  3588.     d0                 a0
  3589.  
  3590.     ULONG    PPCReadWord(ULONG*);
  3591.  
  3592.    FUNCTION
  3593.     This function reads a long by the 68k processor.
  3594.     Quick way to read small amounts of data without cache effects
  3595.  
  3596.    RESULT
  3597.     Result - UWORD read from the address
  3598.  
  3599.    SEE ALSO
  3600.     PPCWriteWord()
  3601.  
  3602. PowerUPKernel/PPCReleasePort                     PowerUPKernel/PPCReleasePort
  3603.  
  3604.     NAME
  3605.     PPCReleasePort -- Releases an obtained PPC Message Port
  3606.  
  3607.     SYNOPSIS
  3608.     Success = PPCReleasePort(PPCPort)
  3609.     gpr3                     gpr3
  3610.  
  3611.     void PPCReleasePort(void*);
  3612.  
  3613.     FUNCTION
  3614.     Releases a PPC MsgPort, so it may be removed after nobody
  3615.     needs it anymore.
  3616.  
  3617.     INPUTS
  3618.     PPCPort - Ptr to an object generated by PPCCreatePort
  3619.  
  3620.     RESULT
  3621.     Success - Boolean which says if the PPCPort could be released
  3622.               successfully. If this fails the PPCPort is still obtained
  3623.               by somebody else.
  3624.     SEE ALSO
  3625.     PPCObtainPort(), powerup/ppclib/message.h
  3626.  
  3627. PowerUPKernel/PPCReleaseSemaphore           PowerUPKernel/PPCReleaseSemaphore
  3628.  
  3629.    NAME
  3630.     PPCReleaseSemaphore -- make semaphore available to others
  3631.  
  3632.    SYNOPSIS
  3633.     PPCReleaseSemaphore(Semaphore)
  3634.                     gpr3
  3635.  
  3636.     void PPCReleaseSemaphore(void*);
  3637.  
  3638.    FUNCTION
  3639.     PPCReleaseSemaphore() is the inverse of PPCObtainSemaphore(). It makes
  3640.     the semaphore lockable to other users.    If tasks are waiting for
  3641.     the semaphore and this this task is done with the semaphore then
  3642.     the next waiting task is signalled.
  3643.  
  3644.     Each PPCObtainSemaphore() call must be balanced by exactly one
  3645.     PPCReleaseSemaphore() call.  This is because there is a nesting count
  3646.     maintained in the semaphore of the number of times that the current
  3647.     task has locked the semaphore. The semaphore is not released to
  3648.     other PPC tasks until the number of releases matches the number of
  3649.     obtains.
  3650.  
  3651.     Needless to say, havoc breaks out if the task releases more times
  3652.     than it has obtained.
  3653.  
  3654.    INPUT
  3655.        Semaphore -- a semaphore object returned by PPCCreateSemaphore()
  3656.  
  3657.    SEE ALSO
  3658.     PPCObtainSemaphore(), PPCObtainSemaphoreShared()
  3659.  
  3660. PowerUPKernel/PPCRemHead                             PowerUPKernel/PPCRemHead
  3661.  
  3662.    NAME
  3663.     PPCRemHead -- remove the head node from a list
  3664.  
  3665.    SYNOPSIS
  3666.     node = PPCRemHead(list)
  3667.     gpr3              gpr3
  3668.  
  3669.     struct Node *PPCRemHead(struct List *);
  3670.  
  3671.    FUNCTION
  3672.     Get a pointer to the head node and remove it from the list.
  3673.  
  3674.    WARNING
  3675.     This function does not arbitrate for access to the list.  The
  3676.     calling task must be the owner of the involved list.
  3677.  
  3678.    INPUTS
  3679.     list - a pointer to the target list header
  3680.  
  3681.    RESULT
  3682.     node - the node removed or NULL when empty list
  3683.  
  3684.    SEE ALSO
  3685.     PPCAddHead(), PPCAddTail(),
  3686.     PPCEnqueue(), PPCInsert(),
  3687.     PPCRemove(), PPCRemTail()
  3688.  
  3689. PowerUPKernel/PPCRemHeadSync                     PowerUPKernel/PPCRemHeadSync
  3690.  
  3691.    NAME
  3692.     PPCRemHeadSync -- sync remove the head node from a list
  3693.  
  3694.    SYNOPSIS
  3695.     node = PPCRemHeadSync(list)
  3696.     gpr3                  gpr3
  3697.  
  3698.     struct Node *PPCRemHead(struct List *);
  3699.  
  3700.    FUNCTION
  3701.     Get a pointer to the head node and remove it from the list.
  3702.  
  3703.    INPUTS
  3704.     list - a pointer to the target list header
  3705.  
  3706.    RESULT
  3707.     node - the node removed or zero when empty list
  3708.  
  3709.    SEE ALSO
  3710.     PPCAddHeadSync(), PPCAddTailSync(),
  3711.     PPCEnqueueSync(), PPCInsertSync(),
  3712.     PPCRemoveSync(), PPCRemTailSync()
  3713.  
  3714. PowerUPKernel/PPCRemove                               PowerUPKernel/PPCRemove
  3715.  
  3716.    NAME
  3717.     PPCRemove -- remove a node from a list
  3718.  
  3719.    SYNOPSIS
  3720.     PPCRemove(node)
  3721.               gpr3
  3722.  
  3723.     void PPCRemove(struct Node *);
  3724.  
  3725.    FUNCTION
  3726.     Unlink a node from whatever list it is in.
  3727.     Nodes that are not part    of a list must not
  3728.     be passed to this function!
  3729.  
  3730.    WARNING
  3731.     This function does not arbitrate for access to the list.  The
  3732.     calling task must be the owner of the involved list.
  3733.  
  3734.    INPUTS
  3735.     node - the node to remove
  3736.  
  3737.    SEE ALSO
  3738.     PPCAddHead(), PPCAddTail(),
  3739.     PPCEnqueue(), PPCInsert(),
  3740.     PPCRemHead(), PPCRemTail()
  3741.  
  3742. PowerUPKernel/PPCRemoveSync                       PowerUPKernel/PPCRemoveSync
  3743.  
  3744.    NAME
  3745.     PPCRemoveSync -- sync remove a node from a list
  3746.  
  3747.    SYNOPSIS
  3748.     PPCRemoveSync(node)
  3749.                   gpr3
  3750.  
  3751.     void PPCRemoveSync(struct Node *);
  3752.  
  3753.    FUNCTION
  3754.     Unlink a node from whatever list it is in.  Nodes
  3755.     that are not part of a list must not be passed to
  3756.     this function!
  3757.  
  3758.    INPUTS
  3759.     node - the node to remove
  3760.  
  3761.    SEE ALSO
  3762.     PPCAddHeadSync(), PPCAddTailSync(),
  3763.     PPCEnqueueSync(), PPCInsertSync(),
  3764.     PPCRemHeadSync(), PPCRemTailSync()
  3765.  
  3766. PowerUPKernel/PPCRemPortList                     PowerUPKernel/PPCRemPortList
  3767.  
  3768.    NAME
  3769.     PPCRemPortList -- Remove a port from the PPCPortList object
  3770.  
  3771.    SYNOPSIS
  3772.     PPCRemPortList(PPCPortList,PPCPort)
  3773.                    gpr3        gpr4
  3774.  
  3775.     void PPCRemPortList(void*,void*);
  3776.  
  3777.    FUNCTION
  3778.     This function removes a PPCPort from your PPCPortList object.
  3779.  
  3780.    INPUT
  3781.     PPCPortList - a pointer to the PPCPortList object
  3782.     PPCPort     - a pointer to the PPC Message port
  3783.  
  3784.    SEE ALSO
  3785.     PPCCreatePortList(), powerup/ppclib/message.h
  3786.  
  3787. PowerUPKernel/PPCRemTail                             PowerUPKernel/PPCRemTail
  3788.  
  3789.    NAME
  3790.     PPCRemTail -- remove the tail node from a list
  3791.  
  3792.    SYNOPSIS
  3793.     node = PPCRemTail(list)
  3794.     gpr3              gpr3
  3795.  
  3796.     struct Node *PPCRemTail(struct List *);
  3797.  
  3798.    FUNCTION
  3799.     Remove the last node from a list, and return a pointer to it.
  3800.     If the list is empty, return NULL.
  3801.  
  3802.    WARNING
  3803.     This function does not arbitrate for access to the list.  The
  3804.     calling task must be the owner of the involved list.
  3805.  
  3806.    INPUTS
  3807.     list - a pointer to the target list header
  3808.  
  3809.    RESULT
  3810.     node - the node removed or NULL when empty list
  3811.  
  3812.    SEE ALSO
  3813.     PPCAddHead(), PPCAddTail(),
  3814.     PPCEnqueue(), PPCInsert(),
  3815.     PPCRemove(), PPCRemHead(),
  3816.  
  3817. PowerUPKernel/PPCRemTailSync                     PowerUPKernel/PPCRemTailSync
  3818.  
  3819.    NAME
  3820.     PPCRemTailSync -- sync remove the tail node from a list
  3821.  
  3822.    SYNOPSIS
  3823.     node = PPCRemTailSync(list)
  3824.     gpr3                  gpr3
  3825.  
  3826.     struct Node *PPCRemTailSync(struct List *);
  3827.  
  3828.    FUNCTION
  3829.     Remove the last node from a list, and return a pointer to it.
  3830.     If the list is empty, return NULL.
  3831.  
  3832.    INPUTS
  3833.     list - a pointer to the target list header
  3834.  
  3835.    RESULT
  3836.     node - the node removed or zero when empty list
  3837.  
  3838.    SEE ALSO
  3839.     PPCAddHeadSync(), PPCAddTailSync(),
  3840.     PPCEnqueueSync(), PPCInsertSync(),
  3841.     PPCRemoveSync(), PPCRemHeadSync(),
  3842.  
  3843. PowerUPKernel/PPCReplyMessage                   PowerUPKernel/PPCReplyMessage
  3844.  
  3845.     NAME
  3846.     PPCReplyMessage -- Reply a PPC Message
  3847.  
  3848.     SYNOPSIS
  3849.     Success = PPCReplyMessage(PPCMessage)
  3850.                               gpr3
  3851.  
  3852.     BOOL PPCReplyMessage(void*);
  3853.  
  3854.     FUNCTION
  3855.     Reply a PPC Message. After this operation the embedded Data 
  3856.     informations in the PPC Message isn`t valid anymore. The Message
  3857.     itself is also not valid anymore so any access to the object is
  3858.     not allowed.
  3859.  
  3860.     INPUTS
  3861.     PPCMessage - Ptr to an object generated by PPCCreateMessage
  3862.  
  3863.     RESULT
  3864.     Success - A Boolean tells you if the operation was successful.
  3865.  
  3866.     SEE ALSO
  3867.     PPCGetMessage(), powerup/ppclib/message.h
  3868.  
  3869. PowerUPKernel/PPCRevision                           PowerUPKernel/PPCRevision
  3870.  
  3871.     NAME
  3872.     PPCRevision -- Get Revision of the PowerUPKernel
  3873.  
  3874.     SYNOPSIS
  3875.     Revision = PPCRevision()
  3876.     gpr3
  3877.  
  3878.     ULONG PPCVersion()
  3879.  
  3880.     FUNCTION
  3881.     Returns the Revision of the PowerUPKernel, so software
  3882.     is able to adapt to future changes.
  3883.  
  3884.     RESULT
  3885.     value - The Revision number of the PowerUPKernel
  3886.  
  3887. PowerUPKernel/PPCSeek                                   PowerUPKernel/PPCSeek
  3888.  
  3889.     NAME
  3890.     PPCSeek -- Set the current position for reading and writing
  3891.  
  3892.     SYNOPSIS
  3893.     oldPosition = PPCSeek( file, position, mode )
  3894.     gpr3                   gpr3  gpr4      gpr5
  3895.  
  3896.     LONG PPCSeek(BPTR, LONG, LONG)
  3897.  
  3898.     FUNCTION
  3899.     This function is equal to the dos.library/Seek function.
  3900.     It works in the context of the Msg Task each PPC Task has
  3901.     on the AmigaOS side.
  3902.  
  3903.     INPUTS
  3904.     file - BCPL pointer to a file handle
  3905.     position - integer
  3906.     mode - integer
  3907.  
  3908.     RESULTS
  3909.     oldPosition - integer
  3910.  
  3911.     SEE ALSO
  3912.     PPCOpen(), PPCClose(), PPCWrite(), PPCRead()
  3913.  
  3914. PowerUPKernel/PPCSendMessage                     PowerUPKernel/PPCSendMessage
  3915.  
  3916.     NAME
  3917.     PPCSendMessage -- Sends a PPC Message to a PPC Port
  3918.  
  3919.     SYNOPSIS
  3920.     Success = PPCSendMessage(PPCPort,PPCMessage,Data,Length,MsgID)
  3921.     gpr3                     gpr3    gpr4       gpr5 gpr6   gpr7
  3922.  
  3923.     BOOL PPCSendMessage(void*,void*,void*,ULONG,ULONG);
  3924.  
  3925.     FUNCTION
  3926.     Sends a PPC Message to a PPC Port which may be controlled
  3927.     by the M68k oder PPC. This way you can pass data between
  3928.     the PPC and the M68k in an abstract way which will be source
  3929.     compatible on the A\BOX OS. After you`ve sent a message
  3930.     you MUST NOT change the Data until your task received a reply.
  3931.     If you only want to send a quick 32Bit Msg to the target task
  3932.     use Data as a 32bit Msg value and Length=0.
  3933.     This way no Cache is flushed.
  3934.  
  3935.     INPUTS
  3936.     PPCPort    - Ptr to an object generated by PPCCreatePort
  3937.     PPCMessage - Ptr to an object generated by PPCCreateMessage
  3938.     Data       - Ptr to the Data you wanna send or additional MsgID
  3939.                  if the Length field is 0.
  3940.     Length     - Length of the Data you wanna send.
  3941.     MsgID      - MsgID code you may use for your msg type detection
  3942.  
  3943.     RESULT
  3944.     Success - A Boolean tells you if the operation was successful.
  3945.  
  3946.     SEE ALSO
  3947.     PPCReplyMessage(), powerup/ppclib/message.h
  3948.  
  3949. PowerUPKernel/PPCSetPortListAttr             PowerUPKernel/PPCSetPortListAttr
  3950.  
  3951.     NAME
  3952.     PPCSetPortListAttr -- Set Infos about a PPC PortList
  3953.  
  3954.     SYNOPSIS
  3955.     PPCSetPortListAttr(PPCPortList,Attr)
  3956.                        gpr3        gpr4
  3957.  
  3958.     void PPCSetPortListAttr(void*,ULONG);
  3959.  
  3960.     FUNCTION
  3961.     changes certain PPC PortList attributes. This way you
  3962.     can change the Extended SignalMask for example.
  3963.  
  3964.     INPUTS
  3965.     PPCPortList - Ptr to a PPCPortList object
  3966.     Attr        - Information Attribute
  3967.       o PPCPORTLISTTAG_EXTENDEDSIGNALS,ExtSignalMask
  3968.         changes the PPCPortList extended signalmask to the value you specify
  3969.  
  3970.     SEE ALSO
  3971.     PPCCreatePortList(), PPCPortList(), PPCGetSetPortListAttr(),
  3972.     powerup/ppclib/message.h
  3973.  
  3974. PowerUPKernel/PPCSetSignal                         PowerUPKernel/PPCSetSignal
  3975.  
  3976.    NAME
  3977.     PPCSetSignal -- define the state of this ppctask's signals
  3978.  
  3979.    SYNOPSIS
  3980.     oldSignals = PPCSetSignal(newSignals, signalMask)
  3981.     gpr3                      gpr3        gpr4
  3982.  
  3983.     ULONG PPCSetSignal(ULONG, ULONG)
  3984.  
  3985.    FUNCTION
  3986.     This function defines the states of the ppctask's signalmask.
  3987.     This way you can check for break signals easily.
  3988.  
  3989.    INPUTS
  3990.     newSignals - the new values for the signals specified in
  3991.                  signalSet.
  3992.     signalMask - the set of signals to be effected
  3993.  
  3994.    RESULTS
  3995.     oldSignals - the prior values for all signals
  3996.  
  3997.    EXAMPLE
  3998.     Get the current state of all signals:
  3999.         PPCSetSignal(0,0)
  4000.     Clear all signals:
  4001.         PPCSetSignal(0,FFFFFFFFH)
  4002.  
  4003.    SEE ALSO
  4004.     PPCSignal(), PPCWait()
  4005.  
  4006. PowerUPKernel/PPCSetTaskAttr                     PowerUPKernel/PPCSetTaskAttr
  4007.  
  4008.     NAME
  4009.     PPCSetTaskAttr -- Get PPC Task Attributes (V46)
  4010.  
  4011.     SYNOPSIS
  4012.     PPCSetTaskAttr(Tag, Data)
  4013.                    gpr3 gpr4
  4014.  
  4015.     void PPCSetTaskAttr(ULONG,ULONG);
  4016.  
  4017.     FUNCTION
  4018.     Sets a task attribute. This function isn`t as flexible
  4019.     the AmigaOS ppc.library function. Please check the include which
  4020.     Tag you can use.
  4021.  
  4022.     INPUTS
  4023.     Tag - the information you want.
  4024.      o PPCTASKTAG_EXTUSERDATA, ULONG
  4025.        sets the extended userdata..used by ixemul
  4026.     Data - the attribute datafield
  4027.  
  4028.     RESULT
  4029.  
  4030.     SEE ALSO
  4031.     powerup/ppclib/tasks.h
  4032.  
  4033. PowerUPKernel/PPCSetTimerObject               PowerUPKernel/PPCSetTimerObject
  4034.  
  4035.    NAME
  4036.     PPCSetTimerObject -- set TimerObject attributes
  4037.  
  4038.    SYNOPSIS
  4039.     PPCSetTimerObject(TimerObject, Tag , ValuePtr);
  4040.                   gpr3         gpr4  gpr5
  4041.  
  4042.     void    PPCSetTimerObject(void*,ULONG,unsigned long long*); (GCC)
  4043.     void    PPCSetTimerObject(void*,ULONG,ULONG *[2]);          (SAS)
  4044.  
  4045.    FUNCTION
  4046.  
  4047.    INPUT
  4048.        TimerObject -- an object created with PPCCreateTimerObject
  4049.     Tag         -- attribute
  4050.      o PPCTIMERTAG_START
  4051.        1) TimerObject is a CPU tick counter then it sets the
  4052.           the current timer value as the start position in the
  4053.           timerobject.
  4054.        2) TimerObject is a 50Hz timer you can reactivate stopped
  4055.           timerjobs
  4056.      o PPCTIMERTAG_STOP
  4057.        1) TimerObject is a CPU tick counter then it sets the
  4058.           the current timer value as the stop position in the
  4059.           timerobject.
  4060.        2) TimerObject is a 50Hz timer you can reactivate stopped
  4061.           timerjobs
  4062.  
  4063.     ValuePtr   -- Ptr to an unsigned long long or ULONG[2] where
  4064.                   some optional value result. Not yet used.
  4065.  
  4066.    SEE ALSO
  4067.     PPCCreateTimerObject(), PPCDeleteTimerObject(), PPCGetTimerObject()
  4068.  
  4069. PowerUPKernel/PPCSignal                               PowerUPKernel/PPCSignal
  4070.  
  4071.    NAME
  4072.     PPCSignal -- signal a PPC task
  4073.  
  4074.    SYNOPSIS
  4075.     PPCSignal(PPCTask, signals)
  4076.               gpr3     gpr4
  4077.  
  4078.     void PPCSignal(void*,ULONG);
  4079.  
  4080.    FUNCTION
  4081.     This function signals a PPC task with the given signals.
  4082.     If the task is currently waiting for one or more of these
  4083.     signals, it will be made ready and a reschedule will occur.
  4084.     If the task is not waiting for any of these signals, the
  4085.     signals will be posted to the task for possible later use.
  4086.     A signal may be sent to a task regardless of whether it is
  4087.     running, ready, or waiting.
  4088.  
  4089.     This function is considered "low level".  Its main purpose
  4090.     is to support multiple higher level functions like PPCSendMessage.
  4091.  
  4092.    INPUT
  4093.     task - the task to be signalled
  4094.     signals - the signals to be sent
  4095.  
  4096.    SEE ALSO
  4097.     PPCWait(), PPCSetSignal(), PPCSendMessage()
  4098.  
  4099. PowerUPKernel/PPCsprintf                             PowerUPKernel/PPCsprintf
  4100.  
  4101.     NAME
  4102.     PPCsprintf -- formatted print to a string
  4103.  
  4104.     SYNOPSIS
  4105.     Length = PPCsprintf(Buffer, FmtString, ...)
  4106.     gpr3                gpr3    gpr4
  4107.  
  4108.     int PPCsprintf(char*, const char*, ...);
  4109.  
  4110.     FUNCTION
  4111.     does a format output to a string with stack parameters.
  4112.  
  4113.     INPUTS
  4114.     Buffer    - Ptr to the result string.
  4115.     FmtString - FmtString described in PPCRawDoFmt()
  4116.  
  4117.     RESULT
  4118.     Length - count of char output
  4119.  
  4120.     SEE ALSO
  4121.     PPCvprintf
  4122.  
  4123. PowerUPKernel/PPCSub64                                 PowerUPKernel/PPCSub64
  4124.  
  4125.     NAME
  4126.     PPCSub64 -- Sub 2 64bit integers
  4127.  
  4128.     SYNOPSIS
  4129.     Result = PPCSub64(highA,lowA,highB,lowB )
  4130.     gpr3:gpr4         gpr3  gpr4 gpr5  gpr6
  4131.  
  4132.     long    PPCSub64(ULONG,ULONG,ULONG,ULONG);
  4133.  
  4134.     FUNCTION
  4135.     Subtracts 2 64bit integers and returns the 64bit result in 2
  4136.     32bit registers.
  4137.  
  4138.     INPUTS
  4139.     highA         - upper 32bit of value A
  4140.     lowA         - lower 32bit of value A
  4141.     highB         - upper 32bit of value B
  4142.     lowB         - lower 32bit of value B
  4143.  
  4144.     RESULT
  4145.     Result    - 64Bit result devided into 2 registers
  4146.  
  4147.     SEE ALSO
  4148.     PPCSub64p()
  4149.  
  4150. PowerUPKernel/PPCSub64p                               PowerUPKernel/PPCSub64p
  4151.  
  4152.     NAME
  4153.     PPCSub64p -- Sub 2 64bit integers
  4154.  
  4155.     SYNOPSIS
  4156.     PPCSub64p(ValueAPtr,ValueBPtr)
  4157.               gpr3      gpr4
  4158.  
  4159.     void    PPCSub64p(long long*,long long*);
  4160.  
  4161.     FUNCTION
  4162.     Subtracts 2 64bit integers and returns the 64bit result in
  4163.     A.
  4164.  
  4165.     INPUTS
  4166.     ValueAPtr    - Ptr to 64Bit value A
  4167.     ValueBPtr    - Ptr to 64Bit value B
  4168.  
  4169.     SEE ALSO
  4170.     PPCSub64()
  4171.  
  4172. PowerUPKernel/PPCUnLoadObject                   PowerUPKernel/PPCUnLoadObject
  4173.  
  4174.     NAME
  4175.     PPCUnLoadObject -- UnLoad ELF PPC Object (V46)
  4176.  
  4177.     SYNOPSIS
  4178.     PPCUnLoadObject( Object )
  4179.             gpr3
  4180.  
  4181.     void PPCUnLoadObject(void*);
  4182.  
  4183.     FUNCTION
  4184.     Unloads an Object created with PPCLoadObject().
  4185.  
  4186.     INPUTS
  4187.     object     - ptr to the object given by PPCLoadObject()
  4188.  
  4189.     SEE ALSO
  4190.     PPCUnLoadObject(), PPCCreateTask()
  4191.  
  4192. PowerUPKernel/PPCVersion                             PowerUPKernel/PPCVersion
  4193.  
  4194.     NAME
  4195.     PPCVersion -- Get Version of the PowerUPKernel
  4196.  
  4197.     SYNOPSIS
  4198.     Version = PPCVersion()
  4199.     gpr3
  4200.  
  4201.     ULONG PPCVersion()
  4202.  
  4203.     FUNCTION
  4204.     Returns the Version of the PowerUPKernel, so software
  4205.     is able to adapt to future changes.
  4206.  
  4207.     RESULT
  4208.     value - The version number of the PowerUPKernel
  4209.  
  4210.  
  4211. PowerUPKernel/PPCvfprintf                           PowerUPKernel/PPCvfprintf
  4212.  
  4213.     NAME
  4214.     PPCvfprintf -- formatted write of a varying-length
  4215.                    argument list
  4216.  
  4217.     SYNOPSIS
  4218.     Length = PPCvfprintf(File, FmtString, Args)
  4219.     gpr3                 gpr3  gpr4       gpr5
  4220.  
  4221.     int PPCvfprintf(void*, const char*, va_list);
  4222.  
  4223.     FUNCTION
  4224.     does a format output to the stdout file with a ptr
  4225.     to a va_list array.
  4226.  
  4227.     INPUTS
  4228.     File      - File returned by PPCOpen
  4229.     FmtString - FmtString described in PPCRawDoFmt()
  4230.     Args      - va_list ptr.
  4231.  
  4232.     RESULT
  4233.     Length - count of char output
  4234.  
  4235.     SEE ALSO
  4236.     PPCfprintf
  4237.  
  4238. PowerUPKernel/PPCvkprintf                           PowerUPKernel/PPCvkprintf
  4239.  
  4240.     NAME
  4241.     PPCvkprintf -- formatted write of a varying-length
  4242.                    argument list to the serial
  4243.  
  4244.     SYNOPSIS
  4245.     Length = PPCvkprintf(FmtString, Args)
  4246.     gpr3                 gpr3       gpr4
  4247.  
  4248.     int PPCvkprintf(const char*, va_list);
  4249.  
  4250.     FUNCTION
  4251.     does a format output to the serial with a ptr
  4252.     to a va_list array.
  4253.  
  4254.     INPUTS
  4255.     FmtString - FmtString described in PPCRawDoFmt()
  4256.     Args      - va_list ptr.
  4257.  
  4258.     RESULT
  4259.     Length - count of char output
  4260.  
  4261.     SEE ALSO
  4262.     PPCprintf
  4263.  
  4264. PowerUPKernel/PPCvprintf                             PowerUPKernel/PPCvprintf
  4265.  
  4266.     NAME
  4267.     PPCvprintf -- formatted write of a varying-length
  4268.                   argument list to stdout
  4269.  
  4270.     SYNOPSIS
  4271.     Length = PPCvprintf(FmtString, Args)
  4272.     gpr3                gpr3       gpr4
  4273.  
  4274.     int PPCvprintf(const char*, va_list);
  4275.  
  4276.     FUNCTION
  4277.     does a format output to the stdout file with a ptr
  4278.     to a va_list array.
  4279.  
  4280.     INPUTS
  4281.     FmtString - FmtString described in PPCRawDoFmt()
  4282.     Args      - va_list ptr.
  4283.  
  4284.     RESULT
  4285.     Length - count of char output
  4286.  
  4287.     SEE ALSO
  4288.     PPCprintf
  4289.  
  4290. PowerUPKernel/PPCvsprintf                           PowerUPKernel/PPCvsprintf
  4291.  
  4292.     NAME
  4293.     PPCvsprintf -- formatted write of a varying-length
  4294.                    argument list to a string
  4295.  
  4296.     SYNOPSIS
  4297.     Length = PPCvsprintf(Buffer, FmtString, Args)
  4298.     gpr3                 gpr3    gpr4       gpr5
  4299.  
  4300.     int PPCvsprintf(char*, const char*, va_list);
  4301.  
  4302.     FUNCTION
  4303.     does a format output to the buffer with a ptr
  4304.     to a va_list array.
  4305.  
  4306.     INPUTS
  4307.     Buffer    - Ptr to the result string.
  4308.     FmtString - FmtString described in PPCRawDoFmt()
  4309.     Args      - va_list ptr.
  4310.  
  4311.     RESULT
  4312.     Length - count of char output
  4313.  
  4314.     SEE ALSO
  4315.     PPCprintf
  4316.  
  4317. PowerUPKernel/PPCWait                                   PowerUPKernel/PPCWait
  4318.  
  4319.    NAME
  4320.     PPCWait -- wait for one or more signals
  4321.  
  4322.    SYNOPSIS
  4323.     signals = PPCWait(signalSet)
  4324.     gpr3              gpr3
  4325.  
  4326.     ULONG PPCWait(ULONG);
  4327.  
  4328.    FUNCTION
  4329.     This function will cause the current PPC task to suspend
  4330.     waiting for one or more signals.
  4331.     When one or more of the specified signals are received,
  4332.     the task will return to the ready state, and those signals
  4333.     will be cleared.
  4334.  
  4335.     If a signal occurred prior to calling PPCWait(), the wait
  4336.     condition will be immediately satisfied, and the task will
  4337.     continue to run without any delay.
  4338.  
  4339.  
  4340.    INPUT
  4341.     signalSet - The set of signals for which to wait.
  4342.             Each bit represents a particular signal.
  4343.  
  4344.    RESULTS
  4345.     signals - the set of signals that were active
  4346.  
  4347.    SEE ALSO
  4348.     PPCSignal(), PPCSetSignal()
  4349.  
  4350. PowerUPKernel/PPCWaitPort                           PowerUPKernel/PPCWaitPort
  4351.  
  4352.    NAME
  4353.     PPCWaitPort -- wait for a given PPC Msgport to be non-empty
  4354.  
  4355.    SYNOPSIS
  4356.     PPCMessage = PPCWaitPort(PPCPort)
  4357.     gpr3                     gpr3
  4358.  
  4359.     void*    PPCWaitPort(void*);
  4360.  
  4361.    FUNCTION
  4362.     This function waits for the given PPC Msgport to become non-empty.
  4363.     If necessary, the Wait function will be called to wait for
  4364.     the port signal.  If a message is already present at the
  4365.     port, this function will return immediately.  The return
  4366.     value is always a pointer to the first PPC Message queued (but
  4367.     it is not removed from the queue.
  4368.  
  4369.    INPUT
  4370.     PPCPort - a pointer to the PPC Message port
  4371.  
  4372.    RESULT
  4373.     PPCMessage - a pointer to the first PPC Message in the PPCPort msglist.
  4374.  
  4375.    SEE ALSO
  4376.     PPCGetMessage(), powerup/ppclib/message.h
  4377.  
  4378. PowerUPKernel/PPCWaitPortList                   PowerUPKernel/PPCWaitPortList
  4379.  
  4380.    NAME
  4381.     PPCWaitPortList -- wait for a given PPC Msgport List to get a msg
  4382.  
  4383.    SYNOPSIS
  4384.     PPCPort = PPCWaitPortList(PPCPortList)
  4385.     gpr3                      gpr3
  4386.  
  4387.     void* PPCWaitPortList(void*)
  4388.  
  4389.    FUNCTION
  4390.     This function waits for a list of PPCPorts. If a message
  4391.     is received by one of the ports the port with the msg is
  4392.     returned so you can use PPCGetMessage on that port.
  4393.     NULL is returned if no signals were received or if an extended
  4394.     signal was received. You should always check the Received
  4395.     Signals in PPCWaitPort when you use an extended Signalmask, so
  4396.     you don`t miss signals.
  4397.     It could happen that you get a message and some private signal
  4398.     and the function returns the PPCPort where the message is.
  4399.     In this case you should check the received signalmask to not
  4400.     miss your private signals.
  4401.  
  4402.    INPUT
  4403.     PPCPortList - a pointer to a PPCPortList object created by
  4404.                   PPCCreatePortList()
  4405.  
  4406.    RESULT
  4407.     PPCPort - a pointer to a port which received a msg or NULL.
  4408.  
  4409.    SEE ALSO
  4410.     PPCGetMessage(), PPCWaitPort(),
  4411.     powerup/ppclib/message.h
  4412.  
  4413. PowerUPKernel/PPCWrite                                 PowerUPKernel/PPCWrite
  4414.  
  4415.     NAME
  4416.     PPCWrite -- Write bytes of data to a file
  4417.  
  4418.     SYNOPSIS
  4419.     returnedLength =  PPCWrite( file, buffer, length )
  4420.     gpr3                        gpr3  gpr4       gpr5
  4421.  
  4422.     LONG PPCWrite(BPTR, void *, LONG)
  4423.  
  4424.     FUNCTION
  4425.     This function is equal to the dos.library/Write function.
  4426.     It works in the context of the Msg Task each PPC Task has
  4427.     on the AmigaOS side.
  4428.  
  4429.     ATTENTION
  4430.     You must use PPCAllocMem() for the buffer, so it`s aligned
  4431.     to the PPC cache lines.
  4432.  
  4433.     INPUTS
  4434.     file - BCPL pointer to a file handle
  4435.     buffer - pointer to the buffer
  4436.     length - integer
  4437.  
  4438.     RESULTS
  4439.     returnedLength - integer
  4440.  
  4441.     SEE ALSO
  4442.     PPCOpen(), PPCClose(), PPCSeek(), PPCRead()
  4443.  
  4444. PowerUPKernel/PPCWriteByte                         PowerUPKernel/PPCWriteByte
  4445.  
  4446.    NAME
  4447.     PPCWriteByte -- Write a Long by the 68k side
  4448.  
  4449.    SYNOPSIS
  4450.     PPCWriteByte(Address,Value)
  4451.                  a0      d0
  4452.  
  4453.     void    PPCWriteByte(UBYTE*,ULONG);
  4454.  
  4455.    FUNCTION
  4456.     This function writes a long by the 68k processor.
  4457.     Quick way to write small amounts of data without cache effects
  4458.  
  4459.    SEE ALSO
  4460.     PPCReadByte()
  4461.  
  4462. PowerUPKernel/PPCWriteLong                         PowerUPKernel/PPCWriteLong
  4463.  
  4464.    NAME
  4465.     PPCWriteLong -- Write a Long by the 68k side
  4466.  
  4467.    SYNOPSIS
  4468.     PPCWriteLong(Address,Value)
  4469.                  a0      d0
  4470.  
  4471.     void    PPCWriteLong(ULONG*,ULONG);
  4472.  
  4473.    FUNCTION
  4474.     This function writes a long by the 68k processor.
  4475.     Quick way to write small amounts of data without cache effects
  4476.  
  4477.    SEE ALSO
  4478.     PPCReadLong()
  4479.  
  4480. PowerUPKernel/PPCWriteWord                         PowerUPKernel/PPCWriteWord
  4481.  
  4482.    NAME
  4483.     PPCWriteWord -- Write a Long by the 68k side
  4484.  
  4485.    SYNOPSIS
  4486.     PPCWriteWord(Address,Value)
  4487.                  a0      d0
  4488.  
  4489.     void    PPCWriteWord(UWORD*,ULONG);
  4490.  
  4491.    FUNCTION
  4492.     This function writes a long by the 68k processor.
  4493.     Quick way to write small amounts of data without cache effects
  4494.  
  4495.    SEE ALSO
  4496.     PPCReadWord()
  4497.  
  4498. PowerUPKernel/PPCXor64                                 PowerUPKernel/PPCXor64
  4499.  
  4500.     NAME
  4501.     PPCXor64 -- Xor 2 64 bit integer values (V46)
  4502.  
  4503.     SYNOPSIS
  4504.     Value    =    PPCXor64(ValueA ,  ValueB)
  4505.     gpr3:gpr4               gpr3:gpr4  gpr5:gpr6
  4506.  
  4507.     long long PPCXor64(long long, long long);
  4508.  
  4509.     FUNCTION
  4510.     Xors 2 long long values and returns a long long result.
  4511.  
  4512.     INPUTS
  4513.     ValueA - long long value A
  4514.     ValueB - long long value B
  4515.  
  4516.     RESULT
  4517.     Value - long long result
  4518.  
  4519.     NOTES
  4520.     SAS PPC unfortunately has no 64bit integer support, so you
  4521.     should look for the PTR functions.
  4522.  
  4523.     SEE ALSO
  4524.     PPCXor64p()
  4525.  
  4526. PowerUPKernel/PPCXor64p                               PowerUPKernel/PPCXor64p
  4527.  
  4528.     NAME
  4529.     PPCXor64p -- Xor 2 64 bit integer values (V46)
  4530.  
  4531.     SYNOPSIS
  4532.     PPCXor64p(ValuePtrA, ValuePtrB)
  4533.               gpr3       gpr4
  4534.  
  4535.     void    PPCXor64p(long*,long*);
  4536.  
  4537.     FUNCTION
  4538.     Xors 2 long long values and returns the result at ValuePtrA
  4539.  
  4540.     INPUTS
  4541.     ValuePtrA - ptr to a long long value A
  4542.     ValuePtrB - ptr to a long long value B
  4543.  
  4544.     RESULT
  4545.     ValuePtrA - long long result is written to the ValuePtrA address.
  4546.  
  4547.     SEE ALSO
  4548.     PPCXor64()
  4549.  
  4550.